[SWEA] #5658 보물상자 비밀번호 Python

현지·2021년 10월 7일
0

SWEA

목록 보기
2/2

문제

보물상자 비밀번호 문제 링크

아이디어

✅ 입력을 받은 후 4로 나눠서 반복할 범위를 지정한다. 맨 앞 원소를 제거해서 뒤에 넣는 것을 반복하고 n/4만큼 잘라서 str에 추가한 후 answer에 10진수로 바꿔서 추가한다. 중복을 제거한 후 sort시켜 k번째 수를 출력한다.

  1. for문을 이용하여 n/4만큼 반복을 한다.
  2. num의 맨 앞을 제거한 후 맨 뒤에 삽입한다.(회전하는 역할)
  3. num리스트를 반복하면서 처음 원소가 아니고 n/4의 배수가 아니면 str에 추가한다.
  4. n/4로 나누어 떨어지면 str을 10진수로 변경하여 answer리스트에 추가한다.
  5. answer리스트를 정렬하고, 중복을 제거한 후 k번째 수를 출력한다.

내 코드_python

T = int(input())
for test_case in range(1, T + 1):
    answer = []
    n, k = map(int, input().split())
    num = list(input())

    for j in range(int(n/4)):
        str = ''
        tmp = num[0]
        del num[0]
        num.append(tmp)
        for i in range(n):
            if i == n-1:
                str += num[i]
           	answer.append(int('0x'+str,16))
                break
            if i != 0 and i % int(n/4) == 0:
                answer.append(int('0x'+str,16))
                str=num[i]
            else:
                str += num[i]
    answer.sort(reverse=True)
    answer = list(set(answer))
    print('#%d'%test_case,answer[k-1])

다른 사람 풀이

✅ input을 받은 후 반복될 만큼 뒤에 더 붙여준다.
n/4만큼 잘라서 arr에 추가한 후 중복을 제거하고 sort하여 출력한다.

T = int(input())
for t in range(1, T + 1):
    N, K = map(int, input().split())
    s = input()
    s += s[:N // 4 - 1]
    arr = []

    for i in range(N):
        arr.append(s[i: i + N // 4])
    arr = list(set(arr))
    arr.sort(reverse=True)
    print(f"#{t} {int(arr[K - 1], 16)}")

0개의 댓글