본문 바로가기

알고리즘

SW Expert Academy 5658. 보물상자 비밀번호(java)

728x90
반응형

문제 풀이

- 같은 숫자일 경우 중복을 제거한 후 정렬이 필요하기 때문에 TreeSet을 이용했다.

 

마름모형태로 한 변에 각각 같은 개수의 숫자가 오기 때문에 n개를 4로 나누어서 시계방향으로 돌릴때 n / 4 번째 돌리면 결국 처음 상태와 같아진다.

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.util.TreeSet;
import java.util.stream.IntStream;

public class Solution {

	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();
		sc.nextLine();
		
		for(int test_case = 1; test_case <= T; test_case++)
		{
			String key = sc.nextLine();
			int n = Integer.parseInt(key.split(" ")[0]);
			int k = Integer.parseInt(key.split(" ")[1]);
			

			String caseStr = sc.nextLine();

			char[] arr = new char[caseStr.length()];
			
			int x = n / 4;
			
			
			List<String> list = new ArrayList<>();
			
			for(int i = 0; i < x; i++) {
				String resStr = caseStr.substring(caseStr.length() - i) + caseStr.substring(0, caseStr.length() -  i);
				
				String arrs[] = IntStream.iterate(0, j -> j + x)
					.limit((resStr.length() +x - 1) / x)
					.mapToObj(j -> resStr.substring(j, Math.min(j + x, resStr.length()))).toArray(String[]::new);
				
				list.addAll(Arrays.asList(arrs));
			}
			
			
			TreeSet<String> sets = new TreeSet<>(Comparator.reverseOrder());
			sets.addAll(list);
			
			int i = 0;
			for(String set : sets) {
				i++;
				if(i == k) {
					int result = Integer.parseInt(set, 16);
					System.out.println("#"+ test_case + " " + result);
				}
			}
		}
	}

}
728x90
반응형