알고리즘/PS - SWEA

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

excited-hyun 2021. 10. 19. 21:10
반응형
 

SW Expert Academy

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

swexpertacademy.com

 

풀이

 

  1. 우선 숫자들을 입력받는 차례대로 LinkedList에 저장합니다.
  2. 회전은 0회~(N/4-1)회 까지 확인해야합니다. 그 이상의 회전은 동일한 패턴이 되기 때문입니다.
  3. 각각의 회전 상태에 대해서 N/4개 씩 (한 변에 위치하는 숫자의 개수) 끊어서 10진수 변환을 하여 HashSet에 저장합니다. (HashSet을 사용하는 이유는 중복을 피하기 위해서 입니다)
  4. 1칸 회전을 위해서 LinkedList의 맨 마지막 값을 뽑아서 LinkedList의 맨앞에 넣어줍니다.
  5. 모든 회전에 대해 완료한 후 HashSet을 LinkedList로 변환한 후 내림차순으로 정렬합니다.
  6. K번째 값을 출력합니다.

 

import java.util.*;

public class Solution {

	static int N, K;
	static HashMap<Character, Integer> m = new HashMap<Character, Integer>();
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		m.put('0', 0); m.put('1', 1); m.put('2', 2); m.put('3', 3); 
		m.put('4', 4); m.put('5', 5); m.put('6', 6); m.put('7', 7); 
		m.put('8', 8); m.put('9', 9); m.put('A', 10); m.put('B', 11); 
		m.put('C', 12); m.put('D', 13); m.put('E', 14); m.put('F', 15); 
		
		int T = sc.nextInt();
		
		for(int tc=1; tc<=T; tc++) {
			LinkedList<Character> list = new LinkedList<>();
			HashSet<Integer> s = new HashSet<>();
			
			N = sc.nextInt();
			K = sc.nextInt();
			String num = sc.next();
			
			for(int i=0; i<N; i++) {
				
				list.add(num.charAt(i));
			}
			
			int byun = N/4;
			
			// 확인해야할 모든 회전에 대해서 확인 
			for(int i=0; i<N/4; i++) {
				//4개의 변에 대해 10진수 변환 
				for(int j=0; j<4; j++) {
					int n = 0;
					
					// 한 변의 16진수들을 10진수 변환 
					for(int l = 0; l<byun; l++) {
						char now = list.get(l+j*byun);
						int deci = m.get(now);
						n = n*16 + deci;
					}
					//HashSet에 10진수 숫자 저장 
					s.add(n);
				}
				
				// 회전 수행 
				char back = list.pollLast();
				list.addFirst(back);
			}
			
			// 내림차순 정렬 
			LinkedList<Integer> l = new LinkedList(s);
			Collections.sort(l, Comparator.reverseOrder());
			
			// K번째 값 출력 
			System.out.println("#"+tc+" "+l.get(K-1));
			
		}

	}

}

 

728x90
반응형

'알고리즘 > PS - SWEA' 카테고리의 다른 글

[SWEA 4008 - Java] 숫자 만들기  (0) 2021.10.22
[SWEA 5656 - Java] 벽돌 깨기  (0) 2021.10.19
[SWEA 5644 - Java] 무선 충전  (0) 2021.10.18
[SWEA 4012 - Java] 요리사  (0) 2021.10.15
[SWEA 5650 - Java] 핀볼 게임  (0) 2021.10.15