난이도 : D3
문제번호 : 1244
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
퀴즈 대회에 참가해서 우승을 하게 되면 보너스 상금을 획득할 수 있는 기회를 부여받는다. |
입력
가장 첫 줄은 전체 테스트 케이스의 수이다. |
출력
각 테스트 케이스마다, 첫 줄에는 “#C”를 출력해야 하는데 C는 케이스 번호이다. |
예시
입력 | 출력 |
3 123 1 2737 1 32888 2 . . . |
#1 321 #2 7732 #3 88832 . . . |
2. 문제풀이
D3 치고는 어려운 문제라고 생각했다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#D3 1244 최대상금
#경우의 수 찾기, 매개변수로 몇번 바꿧는지 적는다.
def dfs(count):
global answer
#횟수를 다 사용했다면
if not count:
#숫자로 바꿔보고
temp = int(''.join(values))
#가지고 있는 최대수보다 크다면 갱신
if answer < temp:
answer = temp
return
# 바꿔야 하니까 이중 포문
for i in range(length):
#경우의 수를 찾는거니까 i보다 큰위치부터
for j in range(i+1, length):
#두개의 위치를 바꾸고 나서
values[i], values[j] = values[j], values[i]
#가지치기 해야하니까 일단 합쳐보고
temp_key = ''.join(values)
#어떤수가 몇회차에 나왔는지 체크 1이면 안나온거니까 경우의수에 넣어주기
if visited.get((temp_key, count-1), 1):
#이숫자는 몇회차에 사용했으니까 체크해주고
visited[(temp_key, count-1)] = 0
#dfs도 돌려주고
dfs(count-1)
#다 썻으면 원상복귀
values[i], values[j] = values[j], values[i]
for t in range(int(input())):
answer = -1
value, change = input().split()
#바꾸기 편하려고 리스트화시킴
values = list(value)
change = int(change)
#계속 쓸꺼니까 캐스팅
length = len(values)
#가지치기용 딕셔너리
visited = {}
dfs(change)
print('#{} {}'.format(t+1, answer))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
수열 합치기 Python(SW Expert Academy) (0) | 2020.05.18 |
---|---|
단순 2진 암호코드(SW Expert Academy) (0) | 2020.05.17 |
이진수2 Python(SW Expert Academy) (0) | 2020.05.15 |
이진수 Python(SW Expert Academy) (0) | 2020.05.14 |
이진탐색 Python(SW Expert Academy) (0) | 2020.05.13 |
댓글