본문 바로가기

Java/Java 알고리즘 SWEA

[SW] 13428. 숫자 조작

반응형

9자리 이하의 음이 아닌 정수 N이 있다. 당신은 이 수에서 한 쌍의 숫자를 골라 그 위치를 바꾸는 일을 최대 한 번 하여(안 하거나, 한 번만 하여) 새로운 수 M을 만들 수 있다. 단, 바꾼 결과 M의 맨 앞에 ‘0’이 나타나면 안 된다.

M의 최솟값과 최댓값을 구하는 프로그램을 작성하라.

[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 하나의 줄로 이루어진다. 각 줄에는 0 이상 999,999,999 이하의 정수 N이 주어진다. N ≠ 0 이라면 주어지는 수가 0으로 시작하지 않는다.


[출력]
각 테스트 케이스마다, M의 최솟값과 최댓값을 공백 하나를 사이로 두고 출력한다.

 

입력
4
12345
54321
142857
10000
 
 

 

출력
#1 12345 52341
#2 14325 54321
#3 124857 842157
#4 10000 10000
 

 

import java.util.*;
public class Solution {
	public int[] solution(int n) {
		String str = Integer.toString(n);
		int[] answer = new int[2];
		answer[0] = n;
    	answer[1] = n;

		for (int p1=0; p1 < str.length(); p1++) {
			for (int p2=1; p2 < str.length(); p2++) {
				
				StringBuilder sb = new StringBuilder();
				sb.append(str);
				String tmp2 = " ";
					if (sb.charAt(p2) == '0' && p1==0) {
						continue;
					}

					else {
						if (p1 != p2) {

						tmp2 = String.valueOf(sb.charAt(p1));
						sb.replace(p1, p1 + 1, String.valueOf(sb.charAt(p2)));
						sb.replace(p2, p2 + 1, String.valueOf(tmp2));
					}
				}
				answer[0] = Math.min(answer[0], Integer.parseInt(sb.toString()));
				answer[1] = Math.max(answer[1], Integer.parseInt(sb.toString()));
			}
		}

		return answer;
	}

	public static void main(String[] args) {
		Solution T = new Solution();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = kb.nextInt();

		}
		for (int i = 0; i < arr.length; i++) {
			int i2 = i + 1;

			System.out.print("#" + i2 + " ");
			for (int x : T.solution(arr[i])){
				System.out.print(x + " ");
            }
            System.out.println();
		}
	}
}

 

반응형