비버놀로지

[SWEA SW Expert Academy] 5658 보물상자 비밀번호 본문

ALGORITM/JAVA

[SWEA SW Expert Academy] 5658 보물상자 비밀번호

KUNDUZ 2020. 12. 2. 14:28
728x90

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo

 

SW Expert Academy

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

swexpertacademy.com

우선순위큐를 이용해서 나열해 주고, 16진수를 10진수로 변환해서 출력을 해주는 방식이다.

 

package com.ssafy.study;

import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Scanner;

public class SWEA_5658_보물상자비밀번호 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int t = 1; t <= T; t++) {
			int N = sc.nextInt();
			int K = sc.nextInt();
			char[] arr = sc.next().toCharArray();
			LinkedList<Character> que = new LinkedList<>();
			for (int i = 0; i < arr.length; i++) {
				que.add(arr[i]);
			}
			PriorityQueue<Integer> resultque = new PriorityQueue<Integer>();
			for (int k = 0; k < N / 4; k++) {	//중복되기 전까지 회전해 준다.
				for (int i = 0; i < 4; i++) {	//4방향을 체크해 준다.
					int temp = 0;
					for (int j = i * N / 4; j < (i + 1) * N / 4; j++) {	//한 방향의 숫자들을 10진수로 변환해 저장해준다.
						if (que.get(j) >= 'A') {
							temp += (que.get(j) - 'A' + 10) * Math.pow(16, (N / 4 - j % (N / 4)) - 1);

						} else {
							temp += (que.get(j) - '0') * Math.pow(16, (N / 4 - j % (N / 4)) - 1);

						}
					}
					if (!resultque.contains(temp)) {

						resultque.add(temp);	//각 변을 10진수로 변환해 큐에 넣어주고, 중복은 제외한다.
					}
				}

				que.addFirst(que.pollLast());	//마지막 숫자를 첫번째로 넣어 회전을 시켜준다.

			}
			int size = resultque.size();
			int result[] = new int[size];	
			for (int i = size - 1; i >= 0; i--) {
				result[i] = resultque.poll();		//배열에 높은 숫자순서대로 넣어준다.
			}
			System.out.println("#" + t + " " + result[K - 1]);	//해당하는 위치의 값은 출력한다.
		}
	}
}
728x90
Comments