๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/24268
๐ ๋ฌธ์ ์์ฝ
- N๋ณด๋ค ํฌ๋ฉด์ d์ง๋ฒ์ผ๋ก ๋ณํํ์ ๋ ๊ฐ ์๋ฆฌ ์ซ์๊ฐ ํ ๋ฒ์ฉ๋ง ๋ฑ์ฅํ๋ ๊ฐ์ฅ ์์ ์๋ฅผ ์ฐพ์ 10์ง๋ฒ์ผ๋ก ์ถ๋ ฅ.
- ๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด -1 ์ถ๋ ฅ
๐ ํ์ด ๋ฐ ์๊ณ ๋ฆฌ์ฆ
๊ฐ๋ฅํ ์ต๋๊ฐ ๊ณ์ฐ
- d์ง๋ฒ์์ ๊ฐ์ฅ ํฐ d์๋ฆฌ ์ซ์(d-1๋ถํฐ 0๊น์ง)๋ฅผ ๊ตฌํจ.
- N์ด ์ด ๊ฐ๋ณด๋ค ํฌ๋ฉด -1 ์ถ๋ ฅ.
- ๋ฐฑํธ๋ํน(DFS)์ผ๋ก ์์ด ์์ฑ
- d์๋ฆฌ ์ซ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก d์๋ฆฌ ์์ด์ ์์ฑ.
- visited[]๋ฅผ ํ์ฉํด ์ค๋ณต ์ซ์ ๋ฐฉ์ง.
- ์ซ์ ํฌ๊ธฐ ๋น๊ต ๋ฐ ๋ณํ
- ์์ฑ๋ ์ซ์๊ฐ N๋ณด๋ค ํฌ๋ฉด 10์ง๋ฒ์ผ๋ก ๋ณํํ์ฌ ์ถ๋ ฅ.
- ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ์ผ๋ฉด ์ฆ์ System.exit(0);์ผ๋ก ํ๋ก๊ทธ๋จ ์ข ๋ฃ.
๐ก ์ฝ๋
public class Baekjoon_24268 {
static int n, d;
static int[] visited;
static int[] nums;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
d = sc.nextInt();
visited = new int[d];
nums = new int[d];
// 1. d์ง๋ฒ์์ ๋ง๋ค ์ ์๋ ์ต๋๊ฐ ๊ตฌํ๊ธฐ (d-1 ~ 0)
String maxStr = "";
for (int i = d - 1; i >= 0; i--) {
maxStr += i;
}
int max = Integer.parseInt(maxStr, d);
// 2. n์ด ์ด๋ฏธ ์ต๋๊ฐ ์ด์์ด๋ฉด -1 ์ถ๋ ฅ
if (n >= max) {
System.out.println(-1);
return;
}
// 3. ๋ฐฑํธ๋ํน ํ์ ์์
dfs(0);
}
static void dfs(int L) {
// ์ฒซ๋ฒ์งธ ์๋ฆฌ๊ฐ 0์ด๋ฉด ์๋จ
if (L == d && nums[0] != 0) {
// 4. ์ซ์ ์กฐํฉ์ ๋ฌธ์์ด๋ก ๋ณํ
String res = "";
for (int x : nums) {
res += x;
}
if (n < Integer.parseInt(res)) {
System.out.println(Integer.parseInt(res, d));
System.exit(0);
}
return;
}
// 5. ์ซ์ ์์ด ์์ฑ
for (int i = 0; i < d; i++) {
if (visited[i] == 0) {
visited[i] = 1;
nums[L] = i;
dfs(L + 1);
visited[i] = 0;
}
}
}
}
๐ ์๊ฐ ๋ณต์ก๋ ๋ถ์
- ๋ฐฑํธ๋ํน ํ์ (O(d!))
- d์๋ฆฌ ์์ด์ ์์ฑํ๋ฏ๋ก ์ต๋ O(d!).
- d ≤ 10์ด๋ฏ๋ก, 10! = 3,628,800 ์ ๋๋ก ์ถฉ๋ถํ ํ์ ๊ฐ๋ฅ.
'์๊ณ ๋ฆฌ์ฆ(JAVA)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 1316 "๊ทธ๋ฃน ๋จ์ด ์ฒด์ปค" (JAVA) (0) | 2025.02.18 |
---|---|
๋ฐฑ์ค 1003 "ํผ๋ณด๋์น ํจ์" (JAVA) (0) | 2025.02.17 |
๋ฐฑ์ค 9935 "๋ฌธ์์ด ํญ๋ฐ" (JAVA) (0) | 2025.02.16 |
๋ฐฑ์ค 3078 "์ข์ ์น๊ตฌ" (JAVA) (0) | 2025.02.15 |
๋ฐฑ์ค 1946 "์ ์ ์ฌ์" (JAVA) (0) | 2025.02.15 |