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