PS/SWEA

SWEA 5658 - 보물상자 비밀번호 [Java]

munsik22 2026. 8. 5. 08:54

문제

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

풀이

예전에 백준에서 비슷한 문제를 풀었던 것 같다. Python과 다르게 Java의 Deque에는 rotate 메서드가 없기 때문에 직접 구현해줘야 했다.

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

public class Solution {
	private static Deque<Character> deque;
	
	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());
		for (int t = 1; t <= T; t++) {
			String[] input = br.readLine().split(" ");
			int N = Integer.parseInt(input[0]);
			int K = Integer.parseInt(input[1]);
			String str = br.readLine();
			
			deque = new ArrayDeque<>();
			for (int i = 0; i < N; i++) {
				deque.add(str.charAt(i));
			}
			
			Set<Integer> set = new HashSet<>();
			for (int i = 0; i < N; i++) {
				rotate();
				Object[] tmp = deque.toArray();
				StringBuilder sb = new StringBuilder();
				for (int j = 0; j < N / 4; j++) {
					if (tmp[j] instanceof Character) {
						sb.append((Character) tmp[j]);
					}
				}
				set.add(Integer.parseInt(sb.toString(), 16));
			}
			
			List<Integer> list = new ArrayList<>();
			for (Integer n: set) {
				list.add(n);
			}
			Collections.sort(list, Collections.reverseOrder());
			
			System.out.println("#" + t + " " + list.get(K-1));
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
	
	private static void rotate() {
		Character c = deque.removeLast();
		deque.addFirst(c);
	}
}