알고리즘(백준 등) 공부

SWEA 13428. 숫자 조작

posite 2026. 5. 17. 12:14

주어진 수에서  한 쌍의 숫자를 골라 그 위치를 바꾸는 일을 최대 한 번 하여 최솟값, 최댓값을 구하는 문제이다. 수는 0으로 시작하면 안된다.

 

주어진 수를 시작부터 끝까지 순회하면서  앞의 숫자와 위치를 바꾼 후 최댓값 최솟값을 업데이트 해준다. 맨 앞이 0만 안되게 조건을 달아준다.

long max = Long.parseLong(number), min = Long.parseLong(number) ;
for(int i=0; i<length; i++) {
    for(int j=i+1; j<length; j++) {
        if(i == 0 && number.charAt(j) == '0') continue;
        StringBuilder m = new StringBuilder(number);
        m.setCharAt(i, number.charAt(j));
        m.setCharAt(j, number.charAt(i));
        max = Math.max(max, Long.parseLong(m.toString()));
        min = Math.min(min, Long.parseLong(m.toString()));
    }
}
sb.append(min).append(' ').append(max).append('\n');

 

 

결과 코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());
        
        StringBuilder sb = new StringBuilder();
        for(int tc=1; tc<=T; tc++) {
            sb.append('#').append(tc).append(' ');
            String number = br.readLine();
            int length = number.length();
            long max = Long.parseLong(number), min = Long.parseLong(number) ;
            for(int i=0; i<length; i++) {
                for(int j=i+1; j<length; j++) {
                    if(i == 0 && number.charAt(j) == '0') continue;
                    StringBuilder m = new StringBuilder(number);
                    m.setCharAt(i, number.charAt(j));
                    m.setCharAt(j, number.charAt(i));
                    max = Math.max(max, Long.parseLong(m.toString()));
                    min = Math.min(min, Long.parseLong(m.toString()));
                }
            }
            sb.append(min).append(' ').append(max).append('\n');
        }
        
        br.close();
        System.out.print(sb);
    }
}