728x90
SMALL
🫠문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
숫자들의 주어진 수 만큼 교환하여 가장 큰수를 만드는 문제이다
😎풀이
백트레킹으로 해결했다
- (해당 회차, 숫자리스트) 로 visited 여부를 확인하고 같은 것이 반복되지 않도록했다
- combinations를 이용해서 가능한 교환의 경우를 계산하고 이를 순회한다
from itertools import combinations
def Backtracking(n):
global answer
if n == change: # 모두 회전한 경우
result = 0
for num in range(len(num_list)):
result = result * 10 + num_list[num]
answer=max(answer,result)
return
for comb in combs:
i,j=comb
num_list[i],num_list[j]=num_list[j],num_list[i]
for num in range(len(num_list)):
result = result * 10 + num_list[num]
if (n,result) not in visited:
Backtracking(n + 1)
visited.add((n,result))
num_list[j], num_list[i] = num_list[i], num_list[j] # 백트레킹의 핵심
T = int(input())
for t in range(T):
num, change = map(str, input().split())
num_list = list(map(int, num))
len_num_list=len(num_list)
change = int(change)
index_list = list(i for i in range(len(num_list)))
combs = list(combinations(index_list, 2))
visited=set()
n = 0
Backtracking(0)
print(f"#{t+1} {answer}")
728x90
LIST
'코테공부' 카테고리의 다른 글
[SW Expert Academy]1954. 달팽이 숫자 (0) | 2024.11.18 |
---|---|
[SW Expert Academy]1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) | 2024.11.17 |
[SW Expert Academy] 20936. 상자 정렬하기 (0) | 2024.11.15 |
[SW Expert Academy] 2072. 홀수만 더하기 (0) | 2024.11.12 |
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2024.11.10 |