- 16진수를 리스트 형태로 받아오기
- 주어진 n을 4번 나눈 수만큼 회전을 해야 함.
- 회전 때마다 16진수의 제일 뒷자리를 없애고 그것을 앞에다 붙여줌.
- for문을 돌며 16진수를 4등분한 숫자들을 nums라는 set에 담아줌.
- nums를 리스트로 변환 후 내림차순 정렬함.
- k번째로 큰 수를 골라서 10진수로 변경하기
## ☘16진수를 10진수로 변경하는 방법
int(nums[k-1], 16)
첫번째 인자는 변경하고 싶은 16진수의 숫자,
두번째 인자는 첫번째 인자가 16진수라는 것을 알려줌
for tc in range(1, int(input())+1):
n, k = map(int, input().split())
hexa = list(input())
## 회전 횟수
rotate = (n//4)
## 받아오는 아이들은 중복이 없어야 함.
nums = set()
## 해당 횟수만큼 회전을 할 것임
for i in range(rotate):
## 첫번째 회전을 제외하고서는 숫자 리스트가 한 칸씩 미렬야 함.
if i != 0:
## 끝을 pop하고 다시 앞에다 insert 해줌.
a = hexa.pop()
hexa.insert(0, a)
for j in range(4):
### 리스트 형태로 받아왔기 때문에 join으로 문자열로 바꿔준 후 nums라는 set에 추가해줌.
hexa_component = ''.join(hexa[j*rotate:(j+1)*rotate])
nums.add(hexa_component)
## set이기 때문에 다시 list로 변경 후 내림차순 정렬
nums = list(nums)
nums.sort(reverse=True)
## k번째 수를 골라 10진수로 변환
print('#{} {}'.format(tc, int(nums[k-1], 16)))
16진수 -> 10진수 변환 방법을 잊은 덕에 무려 2시간이나 걸렸다,,
그래도 옛날보다 알고리즘 실력이 훨 나아진 것이 느껴지기 때문에 좋다 아주