백준 9081 - 단어 맞추기

Updated:

Java

9081 번 - 단어 맞추기

문제

접근 방법

c++의 Next Permutaion을 구현하여 해결하였다.

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	static char[] str;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int idx = stoi(br.readLine());
    	while(idx-- != 0) {
    		str = br.readLine().toCharArray();
    		n = str.length;
    		nextP();
    		for(int i = 0; i < n; i++) {
    			sb.append(str[i]);
    		}
    		System.out.println(sb.toString());
    		sb.setLength(0);
    	}
    	br.close();
	}

	static void nextP() {
		int i = n - 1;

		// 뒤에서 부터 탐색하여, 오름차순을 만족하지 않는 인덱스를 찾는다.
		while(i > 0 && str[i - 1] >= str[i])
			i--;
		// 제일 앞까지 오름차순이면, 마지막 단어이다.
		if(i == 0)
			return;

		i--;
		int j = n - 1;
		// 다시 뒤에서 부터 탐색하여 자신보다 큰, 바꿀 문자를 찾는다.
		while(str[i] >= str[j])
			j--;

		// 문자 교환
		char temp = str[j];
		str[j] = str[i];
		str[i] = temp;

		// 정렬
		Arrays.sort(str,i + 1, n);
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점