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

1 분 소요

문제 링크

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


풀이 과정

마름모 한 변엔 N/4개의 숫자가 적혀있는 걸 알 수 있습니다. 이후 돌릴때마다 숫자가 시계방향으로 한 칸씩 이동하므로, 0회전 ~ N/4 - 1회전까지 만들어지는 숫자가 반복됨을 알 수 있습니다.

따라서 0회전 ~ N/4 - 1회전까지 만들어지는 16진수의 숫자를 parseInt 함수를 통해 10진수로 변환해서 리스트에 넣고, 내림차순 정렬을 통해 K번 째 수를 찾아낼 수 있었습니다.


코드

import java.util.*;

public class Solution {
    static int N, K;
    static String input;
    static ArrayList<Integer> list;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int TC = sc.nextInt();
        for (int tc = 1; tc <= TC; tc++) {
            N = sc.nextInt();
            K = sc.nextInt();

            input = sc.next();

            list = new ArrayList<>();

            for (int i = 0; i < N / 4; i++) {
                if (i != 0)
                    input = input.substring(input.length() - 1) + input.substring(0, input.length() - 1);

                int delta = 0;
                while (delta < input.length()) {
                    if (!list.contains(Integer.parseInt(input.substring(delta, delta + N / 4), 16)))
                        list.add(Integer.parseInt(input.substring(delta, delta + N / 4), 16));
                    delta += N / 4;
                }
            }

            Collections.sort(list, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2.intValue() - o1.intValue();
                }
            });

            System.out.println("#" + tc + " " + list.get(K - 1));
        }
    }
}

카테고리:

업데이트:

댓글남기기