[SWEA D3] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금]

shin·2022년 11월 19일
0

CodingTest 문제 풀이

목록 보기
58/79

문제 : [SWEA D3] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금

풀이

def dfs(idx, cnt):
    global answer
    if cnt == n: # 교환 수를 다 채운 경우
        answer = max(int("".join(nums)), answer) # answer에 저장된 값과 nums에 있는 값을 비교해서 큰 값을 answer로 지정
        return
    for i in range(idx, count):
        for j in range(i + 1, count):
            if nums[i] <= num[j]: # 뒤에 있는 값이 앞에 있는 값보다 크면 교환
                nums[i], nums[j] = nums[j], nums[i]
                dfs(i, cnt + 1)
                nums[i], nums[j] = nums[j], nums[i] # 원상 복구
    if not answer and cnt < n: # 실행 중간에 나올 수 있는 가장 큰 수가 나온 경우
        if (n - cnt) % 2 == 1: # 홀수이면 마지막 두 자리만 교환, 짝수이면 변화 없음
            nums[-1], nums[-2] = nums[-2], nums[-1]
        dfs(idx, n)

T = int(input())
for t in range(1, T + 1):
    num, n = input().split()
    nums = list(num)
    count = len(nums)
    n = int(n)
    answer = 0
    
    dfs(0, 0)
    print(f"#{t} {answer}")
profile
Backend development

0개의 댓글