[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));
}
}
}
댓글남기기