-
3980. [Python]선발 명단Python_알고리즘/Gold V 2024. 10. 21. 18:40
1. 문제
https://www.acmicpc.net/problem/3980
2. 접근 방법
- 시간 제한: 1초
- 메모리 제한: 128MB
- 백트래킹
- 브루트 포스
3. 파이썬 코드
import sys input = sys.stdin.readline # 백트래킹 def DFS(start): # 최대값 저장 global max_value # 값 저장 global value # 최종 11에 도달했을 때 if start == 11: # 최대 값보다 값이 크면 갱신 if max_value < value: max_value = value return # 11명의 포지션 바복 for j in range(11): # 포지션 값이 0 이 아니고 방문안했을 경우 if position[start][j] != 0 and pos_visited[j] == False: # 방문 처리 후 값 더해주고 재귀 실행 백트래킹 pos_visited[j] = True value += position[start][j] DFS(start+1) value -= position[start][j] pos_visited[j] = False T = int(input()) # 테스트 케이스 반복문 만큼 진행 for _ in range(T): # 포지션별 리스트 추가 position = [] for _ in range(11): position.append(list(map(int,input().split()))) # 최대값 기본 값 max_value = 0 value = 0 # 방문처리 체크 pos_visited = [False] * 11 # 백트래킹 for i in range(11): if position[0][i] != 0: pos_visited[i] = True value += position[0][i] DFS(1) value -= position[0][i] pos_visited[i] = False print(max_value)
4. 문제를 풀고난 후 생각
- 모든 경우의 수를 다 탐색하면서 알고리즘을 돌리면 된다.
- 백트래킹을 진행하되 0 번인덱스를 기준으로 백트래킹을 해주면 원하는 결과값이 나온다.
- 테스트 케이스 개수가 따로 명시되어있진 않았고 인풋이 많을 것 같아서 sys.stdin.readline 처리를 해줬다.
5. 문제를 푸는데 도움이 되는 지식
- 브루트 포스
- 백트래킹
'Python_알고리즘 > Gold V' 카테고리의 다른 글
13023. [Python]ABCDE (0) 2025.04.09 13398. [Python]연속합 2 (0) 2025.03.16 1469. [Python]숌 사이 수열 (0) 2024.10.08 14719. [Python]빗물 (0) 2024.09.30 2294. [Python]동전 2 (1) 2024.09.05