Algorithm/SW Expert Academy

[Python] 1244. 최대 상금

느낌표 공장장 2021. 10. 1. 22:55
def recur(cnt, n):
    global answer
    if cnt == n:    # n만큼 바꿔줬다면
        temp = ''.join(board)   # 문자열로 바꿔주기
        if answer < temp:   # answer에 저장되어있는 값보다 크다면 갱신
            answer = temp
        return

    for i in range(len_b):
        for j in range(i+1, len_b): # 현재 자리(i)의 다음자리부터 비교
            board[i], board[j] = board[j], board[i] # 바꾸기
            temp = ''.join(board)               # 문자열로 바꿔
            if visited.get((temp, cnt), 1):     # 중복 아니라면
                visited[(temp, cnt)] = 0        # visited에 저장
                recur(cnt+1, n)                 # 들어가기
            board[i], board[j] = board[j], board[i] # 원상복귀


for idx in range(1, int(input())+1):
    board, n = input().split()
    n = int(n)
    board = list(board)
    len_b = len(board)
    visited = {}            # 중복 방지 딕셔너리
    answer = '00000000'     # 정답 담는 변수 초기화

    recur(0, n)

    print('#{} {}'.format(idx, answer))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 5201. 컨테이너운반  (0) 2021.10.05
[Python] 5189. 전자카트  (0) 2021.10.03
[Python] 5188. 최소합  (0) 2021.10.01
[Python] 4366. 정식이의 은행업무  (0) 2021.09.30
[Python] 10726. 이진수 표현  (0) 2021.09.30