알고리즘/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');
            }
        }
    }
}