백준 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);
}
}