https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo
from collections import deque
for tc in range(1,int(input())+1):
N,K=map(int,input().split())
arr=deque(list(input()))
sideNum=N//4
allCase=set()
for _ in range(sideNum):
arr.appendleft(arr.pop())
for i in range(0,N,sideNum):
allCase.add(int("0x"+"".join(list(arr)[i:i+sideNum]),16))
print("#"+str(tc)+" "+str(sorted(allCase,reverse=True)[K-1]))
보물상자의 비밀번호 중에 K번째 큰 수를 찾는 문제이다. 매우 간단하게 큐와 set, 그리고 정렬을 통해 풀 수 있다. 예제에서 주어졌듯이 사이드에 있는 숫자의 수만큼만 회전시키면 즉 사각형이기 때문에 총 N개의 수를 4로 나눈 수만큼만 뒤에서 뺏다가 앞으로 넣으면 시계방향 회전이 이루어진다. 이러한 수들을 전부 찾아서 16진수를 10진수로 변환하여 배열에 넣고 내림차순으로 정렬해서 K번째 수를 출력하면 된다.
이렇게 Python로 SWEA의 "보물상자 비밀번호" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊