본문 바로가기

Algorithm/SW Expert Academy

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

반응형

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRUN9KfZ8DFAUo 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


- 문제

  긴 문자열을 이용하여 사각형을 만들 경우 생기는 작은 문자열들을 모두 모아서 내림차순으로 정렬한 결과 K번째 순서에 있는 문자열을 16진수로 바꾸는 문제이다.

 

 

 


- 풀이

T = int(input())
for i in range(T):
    N, K = map(int, input().split())
    letters = input().strip()
    sideNum = N//4
    madeNum = []
    for l in range(sideNum):
        for j in range(4):
            tempNum = []
            for k in range(sideNum, 0, -1):
                tempNum.append(letters[(j*sideNum-k-l)])
            tempStr = "".join(tempNum)
            if tempStr not in madeNum:
                madeNum.append(tempStr)
    madeNum.sort(reverse=True)
    print("#{} {}".format(i+1, int(madeNum[K-1], 16)))

  N개의 숫자가 주어지면 결국 이걸로 사각형을 만들어야 하므로 한면에 있는 문자열의 길이는 sideNum(N//4)가 된다. 반복문을 두개를 겹쳐서 모든 면에 대한 문자열들을 받게 하고 (아래 그림처럼)

얻은 문자열을 하나의 리스트안에 모두 저장해주도록 한다. 이후에 내림차순으로 정렬하고 K-1번째 위치에 있는 문자열을 출력하면 된다. 

 


- 기억할 것!

- [].sort(reverse = True)

: 내림차순으로 정렬, False로하면 오름차순으로 정렬이고 False가 Default이다

 

- int(x,16)

: 정수로 형변환하는데, 16진수로 형변환

 

- K-1

: 10번째 번호를 출력하는거면, 배열/리스트는 0부터 시작이니 9 인덱스를 출력해야 함

 

- input()

: SWEA는 import sys가 안됨

반응형