practivceAlgorithm/swexpertacademy
[SWEA][Python] 1244 최대상금
findTheValue
2021. 10. 1. 21:18
뒤쪽의 큰값을 찾아 교환하며 탐색한 후 혹시 이미 내림차순 정렬이 완료됐는데 교환 횟수를 소모하지 못했을 경우
홀수면 맨뒤 두개 교환, 짝수면 그대로 반환시킨다.
def dfs(idx, cnt):
global answer
if cnt == int(target):
answer = max(int("".join(nums)), answer)
return
for now in range(idx, n):
for max_idx in range(now + 1, n):
if nums[now] <= nums[max_idx]:
nums[now], nums[max_idx] = nums[max_idx], nums[now]
dfs(now, cnt + 1)
nums[now], nums[max_idx] = nums[max_idx], nums[now]
if not answer and cnt < int(target):
rotate = (int(target) - cnt) % 2
if rotate:
nums[-1], nums[-2] = nums[-2], nums[-1]
dfs(idx, int(target))
for test in range(1, int(input()) + 1):
nums, target = input().split()
n = len(nums)
nums = list(nums)
answer = 0
dfs(0, 0)
print(f'#{test} {answer}')