728x90
반응형
풀이 :
완전 탐색 -> DFS 재귀 호출 ( greedy X ) + 시간 초과를 해결하기 위해, chance가 문자열보다 클 때, chance = arr.length
int를 int[]로 바꾸기 : arr = Integer.toString(num).chars().map(c -> c - '0').toArray();
Code
public class Solution1244 {
static String[] arr;
static int max, chance;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int tc = 1 ; tc <= T ; tc++) {
arr = sc.next().split(""); // 문자열 배열에 각각 숫자 한개씩 들어감
chance = sc.nextInt();
max = 0;
// 시간초과 최적화
if(arr.length < chance) { // swap 횟수가 자릿수보다 클 때 -> 이게 틀린 부분 같음 , 홀수번 남으면 max의 마지막 두 숫자를 바꾸어야함
chance = arr.length; // 자릿수만큼만 옮겨도 전부 옮길 수 있음
}
dfs(0, 0);
System.out.println("#" + tc + " " + max);
}
}
static void dfs(int start, int cnt) {
if(cnt == chance) {
String result = "";
for(String s : arr)
result += s;
max = Math.max(max, Integer.parseInt(result));
return;
}
for(int i = start; i < arr.length; i++) {
for(int j = i + 1; j < arr.length; j++) {
// swap
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
dfs(i, cnt + 1); // 깊이 +1
// 다시 swap 해서 되돌림
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
728x90
반응형
'SWEA' 카테고리의 다른 글
swea 1493 [D3] 수의 새로운 연산 JAVA (1) | 2023.11.24 |
---|---|
swea 1289 [D3] 원재의 메모리 복구하기 JAVA (1) | 2023.11.24 |
swea 1240 [D3] [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 JAVA (1) | 2023.11.24 |
swea 1234 [D3] [S/W 문제해결 기본] 10일차 - 비밀번호 JAVA (2) | 2023.11.24 |
swea 1230 [D3] [S/W 문제해결 기본] 8일차 - 암호문3 JAVA (1) | 2023.11.24 |