알고리즘/SWEA
[SWEA] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금
Ellie67
2022. 11. 9. 00:34
https://swexpertacademy.com/main/main.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
SWEA 1244번
[숫자를 문자로 변환]
ch[i] = (char)(y+'0');
[문자 배열을 숫자로 변환]
Integer.parseInt(new String(ch));
숫자 2개를 자리 변경해주는 것이므로 for문 범위를 <맨 마지막 자리-1> 과 <맨 마지막 자리>로 해야 함
import java.util.Scanner;
public class P1244 {
static int n, c, ans;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int t=1; t<=T; t++){
n = sc.nextInt();
c = sc.nextInt();
ans = 0;
char[] ch = Integer.toString(n).toCharArray();
dfs(c, 0, ch);
System.out.println("#"+t+" "+ans);
}
}
public static void dfs(int cnt, int start, char[] ch){
if(cnt == 0){
int cur = Integer.parseInt(new String(ch));
ans = Math.max(ans, cur);
return;
}
for(int i=start; i<ch.length-1; i++){
for(int j=i+1; j<ch.length; j++){
int x = Integer.parseInt(String.valueOf(ch[i]));
int y = Integer.parseInt(String.valueOf(ch[j]));
ch[i] = (char)(y+'0');
ch[j] = (char)(x+'0');
dfs(cnt-1, i, ch);
ch[i] = (char)(x+'0'); // 다시 원상복구
ch[j] = (char)(y+'0');
}
}
}
}