Search

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

URL
태그
브루트포스 알고리즘
백트래킹

문제 설명

숫자판에서 두 자리를 정해진 횟수만큼 교환하여 최대한 큰 금액을 얻는 문제
반드시 횟수만큼 교환이 이루어져야 하고 동일한 위치의 교환이 중복되어도 된다.

예제 입력/출력

입력1
3 123 1 2737 1 32888 2
Plain Text
복사
출력1
#1 321 #2 7732 #3 88832
Plain Text
복사

제약 조건

T10|T| ≤ 10
숫자판의 최대 자릿수는 6자리이며, 최대 교환 횟수는 10

문제 풀이

풀이1 브루트 포스

풀이 코드

def dfs(depth): global ans if depth == M: ans = max(ans, int(''.join(arr))) return for i in range(len(arr)): for j in range(i + 1, len(arr)): arr[i], arr[j] = arr[j], arr[i] check = int(''.join(arr)) if (depth, check) not in visited: visited.append((depth, check)) dfs(depth + 1) arr[i], arr[j] = arr[j], arr[i] result = [] T = int(input()) for case in range(1, T + 1): N, M = map(int, input().split()) arr = list(str(N)) visited = [] ans = 0 dfs(0) print(f"#{case} {ans}")
Python
복사

참고 자료