문제
https://www.acmicpc.net/problem/24268
풀이(32분)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
long N = Long.parseLong(st.nextToken());
int d = Integer.parseInt(st.nextToken());
List<Long> v = new ArrayList<>();
long[] fact = new long[d];
fact[0] = 1;
for (int i = 1; i < d; i++) {
fact[i] = fact[i - 1] * d;
}
for (int i = 0; i < d; i++) {
v.add((long) i);
}
boolean flag = true;
long ans = -1;
while (flag) {
if (v.get(0) != 0) {
long tmp = 0;
for (int i = 0; i < d; i++) {
tmp += v.get(i) * fact[d - 1 - i];
}
if (tmp > N) {
ans = tmp;
break;
}
}
flag = nextPermutation(v);
}
StringBuilder sb = new StringBuilder();
sb.append(ans);
System.out.println(sb.toString());
}
static boolean nextPermutation(List<Long> v) {
int i = v.size() - 2;
while (i >= 0 && v.get(i) >= v.get(i + 1)) i--;
if (i < 0) return false;
int j = v.size() - 1;
while (v.get(i) >= v.get(j)) j--;
Collections.swap(v, i, j);
Collections.reverse(v.subList(i + 1, v.size()));
return true;
}
}
문제 풀이 전략
처음엔 dfs로 진행하려고 했지만 d가 9진법까지로 한정되어 있기 때문에 순열을 통해 모든 경우를 브루트포스 하여 문제를 해결했다!
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 3649번. 로봇 프로젝트(JAVA) (0) | 2025.06.16 |
---|---|
[백준] 16120번. PPAP(JAVA) (1) | 2025.06.15 |
[백준] 3908번. 서로 다른 소수의 합(JAVA) (1) | 2025.06.13 |
[백준] 2655번. 가장높은탑쌓기(JAVA) (0) | 2025.06.13 |
[백준] 4883번. 삼각 그래프(JAVA) (0) | 2025.06.13 |