[SWEA] 5658번 [모의 SW 역량테스트] 보물상자 비밀번호 (Python)

천호영·2023년 9월 13일
0

알고리즘

목록 보기
85/100

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo&categoryId=AWXRUN9KfZ8DFAUo&categoryType=CODE&problemTitle=%EB%AA%A8%EC%9D%98&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

풀이

문제 자체는 간단했으나 16진수를 10진수로 변환하는 과정은 인터넷 서치를 통해 빠르게 알아냈다. 진수간 변환은 외워두는게 좋은 것 같다.

SWEA에서 테스트케이스를 for문을 돌며 수행하므로 전역변수 사용 등에 유의해야 한다. 테스트케이스마다 초기화를 해줘야 하는지 꼭 체크하자.

SWEA에서는 테스트케이스를 파일로 받을수 있도록 스켈레톤 코드를 제공한다. 이에 익숙해지자.
(cf. https://garden1500.tistory.com/8)

# 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의
# 아래 표준 입출력 예제 필요시 참고하세요.

# 표준 입력 예제
'''
a = int(input())                        정수형 변수 1개 입력 받는 예제
b, c = map(int, input().split())        정수형 변수 2개 입력 받는 예제
d = float(input())                      실수형 변수 1개 입력 받는 예제
e, f, g = map(float, input().split())   실수형 변수 3개 입력 받는 예제
h = input()                             문자열 변수 1개 입력 받는 예제
'''

# 표준 출력 예제
'''
a, b = 6, 3
c, d, e = 1.0, 2.5, 3.4
f = "ABC"
print(a)                                정수형 변수 1개 출력하는 예제
print(b, end = " ")                     줄바꿈 하지 않고 정수형 변수와 공백을 출력하는 예제
print(c, d, e)                          실수형 변수 3개 출력하는 예제
print(f)                                문자열 1개 출력하는 예제
'''

#import sys


'''
      아래의 구문은 input.txt 를 read only 형식으로 연 후,
      앞으로 표준 입력(키보드) 대신 input.txt 파일로부터 읽어오겠다는 의미의 코드입니다.
      여러분이 작성한 코드를 테스트 할 때, 편의를 위해서 input.txt에 입력을 저장한 후,
      아래 구문을 이용하면 이후 입력을 수행할 때 표준 입력 대신 파일로부터 입력을 받아올 수 있습니다.

      따라서 테스트를 수행할 때에는 아래 주석을 지우고 이 구문을 사용하셔도 좋습니다.
      아래 구문을 사용하기 위해서는 import sys가 필요합니다.

      단, 채점을 위해 코드를 제출하실 때에는 반드시 아래 구문을 지우거나 주석 처리 하셔야 합니다.
'''
# sys.stdin = open("sample_input.txt", "r")


def hexa_to_decimal(hexa_num):
    """16진수 수를 10진수로 반환"""
    return int(hexa_num, base=16)


T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):
    # ///////////////////////////////////////////////////////////////////////////////////
    N, K = map(int, input().split())
    hexa_nums = input()
    hexa_nums += hexa_nums # 최적화 여지 있음

    decimal_nums = set()
    num_len = N//4  # 한변의 길이
    for i in range(0, N):
        hexa_num = hexa_nums[i:i+num_len]
        decimal_num = hexa_to_decimal(hexa_num)
        decimal_nums.add(decimal_num)

    ans = sorted(list(decimal_nums), reverse=True)[K-1]

    print(f"#{test_case} {ans}")

    # ///////////////////////////////////////////////////////////////////////////////////
profile
성장!

0개의 댓글