• 문제 링크
14629번: 숫자 조각
곧 7살을 맞이하는 준하는 유치원에서 숫자가 적힌 나무 조각들을 가지고 노는 것을 좋아한다. 숫자 조각은 총 10개이며, 각각의 조각엔 0부터 9까지의 숫자가 한 숫자씩 적혀있다. 준하는 각 숫
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
static String n, res;
static long num;
static int limit;
static boolean[] visit;
static long min = Long.MAX_VALUE;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = br.readLine();
num = Long.parseLong(n);
int len = n.length();
if (num >= 9876543210L)
bw.write("9876543210");
else if (num <= 10)
bw.write(String.valueOf(num));
else {
visit = new boolean[10];
if (len != 2) {
limit = len - 2;
visit[9] = true;
recur(0, "9");
visit[9] = false;
}
limit = len - 1;
visit[n.charAt(0) - '0'] = true;
recur(0, String.valueOf(n.charAt(0) - '0'));
visit[n.charAt(0) - '0'] = false;
if (len != 10) {
limit = len;
visit[1] = true;
recur(0, "1");
}
bw.write(res);
}
bw.flush();
}
private static void recur(int depth, String perm) {
if (depth == limit) {
long gap = Math.abs(num - Long.parseLong(perm));
if (min > gap) {
min = gap;
res = perm;
}
return;
}
for (int i = 0; i < 10; i++) {
if (visit[i])
continue;
visit[i] = true;
recur(depth + 1, perm + i);
visit[i] = false;
}
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 15270 친구 팰린드롬 - Backtracking / Java (0) | 2023.03.02 |
---|---|
[백준] 25328 문자열 집합 조합하기 - Backtracking / Java (0) | 2023.03.01 |
[백준] 20950 미술가 미미 - Backtracking / Java (0) | 2023.02.27 |
[백준] 21735 눈덩이 굴리기 - Backtracking / Java (0) | 2023.02.26 |
[백준] 9742 순열 - Backtracking / Java (0) | 2023.02.25 |
댓글