[SWEA] 5658. [모의 SW 역량테스트] 보물상자 비밀번호
728x90

문제

  • 접근 방법
  • 정답 여부

접근 방법

1. queue 자료구조를 활용해서 회전마다 popleft를 횟수마다 해주고 다시 빼낸 것을 append하여 회전 때마다의 리스트를 구한다.
2. 그 후 list를 잘라서 해당 숫자를 join 해 문자열로 만들어서 set 자료구조에 넣어서 중복이 없도록 한다.
3. 해당 set을 리스트로 바꾸고 16진수를 10진수로 변경한다.
4. 내림차순으로 sort한 후, K번째 수를 빼낸다.

코드

from collections import deque
T = int(input())
for test_case in range(1, T+1):
    N, K = map(int, input().split())
    lst = list(input())

    n_set = set()
    count = N // 4
    for i in range(count):
        q = deque(lst)
        for _ in range(i):
            temp = q.popleft()
            q.append(temp)
        temp_list = list(q)

        for i in range(0, len(temp_list), count):
            n_set.add("".join(temp_list[i:i + count]))
    n_list = list(n_set)
    final_list = []
    for i in n_list:
        final_list.append(int(f'0x{i}', 16))
    final_list.sort(reverse=True)
    print(f'#{test_case} {final_list[K-1]}')

정답 여부

  • 정답!!
  • 16진수를 10진수로 변경하는 부분과 배열을 자르는 부분에서 잠시 헷갈렸다 ㅜㅜ
728x90
반응형