알고리즘(백준 등) 공부
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);
}
}