Tags
- ๊ทธ๋ํ ์ด๋ก
- LV2
- CodingTest
- Dynamic Programming
- greedy
- ์๋ฃ๊ตฌ์กฐ
- ์๋ฎฌ๋ ์ด์
- ๋ฐฑํธ๋ํน
- ๊ทธ๋ํ ํ์
- Java
- stack
- BOJ
- ์ ๋ ฌ
- sort
- ๋๋น ์ฐ์ ํ์
- Python
- BFS
- ๊ต์ฌ
- Study
- SpringBoot
- ์ํ
- PGM
- ๊น์ด ์ฐ์ ํ์
- ๋ฌธ์์ด
- DP
- queue
- ๊ตฌํ
- ์ ์๋ก
- Brute Force Algorithm
- dfs
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_10972 : ๋ค์ ์์ด ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์์ด์ ์ n๊ณผ ์์ด์ด ์
๋ ฅ๋๋ค.
- ์์ด์ ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ์ ๋, ์ ๋ ฅ ๋ ์์์ ๋ค์ ์์์ธ ์์ด์ ์ถ๋ ฅํ๋ค.
- n์ด 1๋ง๊น์ง ์ ๋ ฅ๋๋ฏ๋ก, ์ฌ๊ท ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ฌ์ ์ ์ ๋ ฌ์ ๊ตฌํํ๋ฉด ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค. (1๋ง ํฉํ ๋ฆฌ์ผ..?)
- ์ฌ์ ์ ์ ๋ ฌ์ ๋ค์ ๋งํ๋ฉด ์์ด์์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด๋ค.
- ์์ด์ด [1, 2, 3, 6, 5, 4]์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด, 123654 ๋ค์์ผ๋ก ํฐ ์๋ฅผ ์ฐพ์์ผ ํ๋ค.
- 654๋ง ๋ดค์๋ ํด๋น ์กฐํฉ์์ ๊ฐ์ฅ ํฐ ์์ด๋ค.(๋ด๋ฆผ์ฐจ์)
- ๊ทธ ๋ค์์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ด๋ฆผ์ฐจ์์ด ์๋๊ฒ ๋๋ 3์ ๋ฐ๊ฟ์ผ ํ๋ค.
- ๋ง์ฝ ์ด๋ฏธ ๋ด๋ฆผ์ฐจ์์ด๋ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค. (๋ฌธ์ ์กฐ๊ฑด์ ์ฌ์ ์์ ๋ง์ง๋ง ์์ด)
- 6,5,4 ์ค 3๋ณด๋ค ํฌ๋ฉด์ ์ต์๊ฐ์ 4์ด๋ค.(swap : 124653)
- ๋ค์ ๋จ์ 653์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ฐ๋ก ๋ค์ ์์ด์ด ๋๋ค. (124356)
- ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐ๊ฟ ๋ 3๊ณผ 4๋ฅผ ๋ฐ๊ฟจ์ด๋ ๋ค์ 653์ค 3์ ์ต์๊ฐ์ด ๋๋ฏ๋ก ๋ด๋ฆผ์ฐจ์ ์ํ์ด๋ค.
- ๋ฐ๋ก ๋ค์ ์์ด ์ ์ถ๋ ฅํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.util.Scanner;
public class Main {
static int[] arr;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
if (next_Permutation()) {
for (int i : arr) {
System.out.print(i + " ");
}
} else {
System.out.println(-1);
}
}
private static boolean next_Permutation() {
int i = arr.length - 1;
while (i > 0 && arr[i - 1] >= arr[i]) { // 1
i--;
}
if (i == 0) {
return false;
}
int j = arr.length - 1;
while (arr[i - 1] >= arr[j]) { // 2
j--;
}
swap(i - 1, j);
j = arr.length - 1;
while (i < j) { // 3
swap(i, j);
i++;
j--;
}
return true;
}
private static void swap(int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- 1) ์ธ๋ฑ์ค i๋ฅผ ์์ด ๋์์๋ถํฐ 0๊น์ง ๋ฐ๊ฟ๊ฐ๋ฉฐ ๋ด๋ฆผ์ฐจ์์ด ์๋ ๋ถ๋ถ์ ์ฐพ๋๋ค.
- i๊ฐ 0์ด ๋ ๋๊น์ง ๋ด๋ฆผ์ฐจ์์ด๋ฉด, ์ด๋ฏธ ๋ด๋ฆผ์ฐจ์ ์์ด์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๋ค.
- 2) ์ธ๋ฑ์ค j๋ฅผ ์์ด ๋์์๋ถํฐ i๊น์ง ๋ฐ๊ฟ๊ฐ๋ฉฐ arr[j]๊ฐ arr[i-1]๋ค ํฐ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋๋ค.
- i-1 ๋ค์ชฝ์ ๋ด๋ฆผ์ฐจ์์์ i-1๋ณด๋ค ํฐ ์ ์ค ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๋ ๊ฒ์ด๋ค.
- ์ฐพ์ j์ธ๋ฑ์ค์ ๊ฐ์ i-1์ธ๋ฑ์ค์ ๊ฐ๊ณผ ๊ตํํ๋ค.
- 3) i-1 ๋ค์ชฝ์ ๋ด๋ฆผ์ฐจ์์ ์ค๋ฆ์ฐจ์์ผ๋ก ๋ฐ๊พผ๋ค.
- ์ฒ์๊ณผ ๋ ์ธ๋ฑ์ค๊ฐ ์ค์์์ ๋ง๋ ๋ ๊น์ง ์/๋ค๋ฅผ ๊ตํํ๋ฉด ์ค๋ฆ์ฐจ์์ด ๋๋ค.(==์์ด์ ๋ค์ง๋๋ค)
๐ธ ์ค๋ต ์ฝ๋ ๐ธ
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Main {
static int[] arr;
static Integer[] last;
static boolean print = false;
private static void dfs(ArrayList<Integer> temp) {
if (temp.size() == arr.length) {
boolean flag = true;
if (print) {
for (int i : temp) {
System.out.print(i + " ");
}
System.exit(0);
} else {
for (int i = 0; i < arr.length; i++) {
if (temp.get(i) != arr[i]) {
flag = false;
break;
}
}
if (flag) {
print = true;
}
}
} else {
for (int i = 1; i <= arr.length; i++) {
if (!temp.contains(i)) {
temp.add(i);
dfs(temp);
temp.remove(temp.size() - 1);
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
arr = new int[n];
last = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
last[i] = arr[i];
}
Arrays.sort(last, Collections.reverseOrder());
boolean flag = true;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != last[i]) {
flag = false;
break;
}
}
if (flag) {
System.out.println(-1);
}
else
dfs(new ArrayList<>());
}
}
- ์ฌ์ ์ ์ ๋ ฌ์ ์ฌ๊ท ๋ฉ์๋๋ก ๊ตฌํํ์๋ค.
- ์ ๋ ฅ๋ ์์ด๊ณผ ๊ฐ์ ์์ด์ ์ฐพ์ผ๋ฉด, ๋ฐ๋ก ๋ค์ ์์ด์ ์ถ๋ ฅํ๋ค.
- ์์ ๋ ํต๊ณผํ์ง๋ง, ์ ์ถ ์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
๐ธ end ๐ธ
- ์ฌ์ ์ ์ ๋ ฌ์ ์ฌ๊ท ๋ฉ์๋๋ก ๊ตฌํํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
- ์ ๋ต ์ฝ๋์ 3๋ฒ while๋ฌธ์ ์กฐ๊ฑด์ (i != j)๋ก ํด์, i๊ฐ j๋ณด๋ค ์ปค์ง๊ณ ๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋์ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฌ๋ค.
- ์ฌ๊ท ๋ฉ์๋ ๋ฐฉ์์ด ์๊ฐ์ด๊ณผ๊ฐ ๋์ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ํ ์ง ๋ชฐ๋ผ์ ์ ๋ต ํฌ์คํ
์ ์ฐพ์๋ณด์๋ค.
- ์ฌ์ ์ ์ ๋ ฌ๋ ์ํ์ ๋ํด์ ์ฌ๊ท ๋ฐฉ์๋ง ์์๋๋ฐ, ์๋ก์ด ํน์ฑ์ ์๊ฒ ๋์๋ค. (๋ด๋ฆผ์ฐจ์ ์ฐพ๊ธฐ)
- swap๊ณผ ๋ฌธ์ ํ์ด ๋ฉ์๋๋ฅผ ๋ฐ๋ก ๊ตฌํํ๋๊ฒ ๋ ๊น๋ํ ์ฝ๋๊ฐ ๋๋ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_3085 : ์ฌํ ๊ฒ์ (0) | 2023.01.15 |
---|---|
BOJ_2304 : ์ฐฝ๊ณ ๋ค๊ฐํ (0) | 2023.01.15 |
BOJ_2563 : ์์ข ์ด (0) | 2023.01.13 |
BOJ_4948 : ๋ฒ ๋ฅดํธ๋ ๊ณต์ค (0) | 2023.01.12 |
BOJ_11653 : ์์ธ์๋ถํด (0) | 2023.01.12 |