본문 바로가기
Problem Solving/Baekjoon

[백준] 2697 다음수 구하기 - Greedy / Java

by graycode 2023. 5. 14.

 문제 링크

 

2697번: 다음수 구하기

첫째 줄에 테스트 케이스의 개수 T(1<=T<=1,000)가 주어진다. 둘째 줄부터 T개 줄에는 각 테스트 케이스가 주어진다. 테스트 케이스는 한 줄로 이루어져 있으며, 수 A이다. A는 최대 80자리 자연수이다

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());

        StringBuilder sb = new StringBuilder();
        while (t-- > 0)
            sb.append(find(br.readLine())).append("\n");

        bw.write(sb.toString());
        bw.flush();
    }

    private static String find(String input) {
        char[] arr = input.toCharArray();
        int idx = input.length() - 1;

        while (idx > 0 && arr[idx - 1] >= arr[idx])
            idx--;

        if (idx == 0)
            return "BIGGEST";

        Arrays.sort(arr, idx, arr.length);

        char c = arr[idx - 1];
        for (int i = idx; i < arr.length; i++) {
            if (c < arr[i]) {
                arr[idx - 1] = arr[i];
                arr[i] = c;
                break;
            }
        }

        return String.valueOf(arr);
    }

}

댓글