본문 바로가기
백준

백준 9081번 : 단어 맞추기

by Huiyeong 2021. 7. 6.

 문제

https://www.acmicpc.net/problem/9081

 

9081번: 단어 맞추기

입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항상 공백이 없는 연속된 알

www.acmicpc.net

9081 단어 맞추기

 

 구현 방법 

next permutation 알고리즘을 사용하여 풀어주었습니다.

 구현 코드

package BOJ.Gold;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ9081_단어맞추기 {
	static char[] wordArr;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int TC = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		for (int tc=0;tc<TC;tc++) {
			String word = br.readLine();
			wordArr = word.toCharArray();
			
			if(nextPermutation()) {
				for (int i=0;i<word.length();i++) {
					sb.append(wordArr[i]);
				}
				sb.append("\n");
			} else sb.append(word+"\n");
		}
		System.out.println(sb);
	}
	
	static boolean nextPermutation() {
    	// 1. 교환 위치 찾기
		int i = wordArr.length-1;
		while(i>0 && wordArr[i-1]>=wordArr[i]) --i;
		if (i==0) return false;  // i가 0이라면 정렬 끝으로 다음 순열이 없으므로 false 리턴
		
        // 2. 교환할 위치 찾기
		int j = wordArr.length-1;
		while(wordArr[i-1]>=wordArr[j]) --j;
		
        // 3. 교환
		char temp = wordArr[i-1];
		wordArr[i-1] = wordArr[j];
		wordArr[j] = temp;
		
        // 4. 교환 위치 이후 값 정렬
		int k = wordArr.length-1;
		while(i<k) {
			temp = wordArr[i];
			wordArr[i] = wordArr[k];
			wordArr[k] = temp;
			++i; --k;
		}
		return true;
    }
}

 

정답!

'백준' 카테고리의 다른 글

백준 17142번 : 연구소3  (0) 2021.07.09
백준 5014번 : 스타트링크  (0) 2021.07.07
백준 9935번 : 문자열 폭발  (0) 2021.07.05
백준 14442번 : 벽 부수고 이동하기 2  (0) 2021.04.10
백준 2206번 : 벽 부수고 이동하기  (0) 2021.04.09