[실버 1] 백준 16198 - 에너지 모으기 (파이썬)
글 작성자: pental

https://www.acmicpc.net/problem/16198
풀이
- 구슬이 일렬로 놓여 있고, 양끝 구슬을 제외하고 하나를 고를 수 있다.
- 고른 구슬을 제거하면서 얻는 에너지는 (왼쪽 구슬 번호) * (오른쪽 구슬 번호)
- 구슬이 2개 남을때까지 반복
- 얻을 수 있는 에너지의 최대값을 구하라
if len(a) == 2: return w
구슬이 2개만 남으면 더이상 고를 수 없으니, 지금까지 모은 에너지를 반환한다.
재귀 호출은 다음과 같이 진행한다.
for i in range(1, len(a) - 1):
맨 앞과 맨 뒤 구슬을 제외한 가운데 구슬만 고를 수 있다.
na = a[:i] + a[i+1:]
i번째 구슬을 제거해서 새로운 리스트를 만든다.
tmp = dfs(na, w + a[i-1] * a[i+1])
i번째 구슬을 제거했을 때 생기는 에너지를 추가한 다음, 나머지 구슬로 다시 dfs를 호출한다.
if ret < tmp: ret = tmp
모든 경우를 다 탐색해서 최대 에너지 값을 고른다.
코드
# 백준 16198 - 에너지 모으기 # 분류 : 브루트포스, 재귀 N = int(input()) A = list(map(int, input().split())) def dfs(a, w) : if len(a) == 2 : return w ret = 0 for i in range(1, len(a) - 1) : na = a[ : i] + a[i + 1 :] tmp = dfs(na, w + a[i - 1] * a[i + 1]) if ret < tmp : ret = tmp return ret print(dfs(A, 0))
이 글은
(새창열림)
본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리
'Programming > 백준' 카테고리의 다른 글
[골드 5] 백준 13398 - 연속합 2 (파이썬) (0) | 2025.04.30 |
---|---|
[실버 4] 백준 10211 - Maximun Subarray (파이썬) (0) | 2025.04.30 |
[골드 4] 백준 12886 - 돌 그룹 (파이썬) (0) | 2025.04.29 |
[실버 1] 백준 3184 - 양 (파이썬) (0) | 2025.04.29 |
[실버 3] 백준 28353 - 고양이 카페 (파이썬) (1) | 2025.04.29 |
댓글
이 글 공유하기
다른 글
-
[골드 5] 백준 13398 - 연속합 2 (파이썬)
[골드 5] 백준 13398 - 연속합 2 (파이썬)
2025.04.30 -
[실버 4] 백준 10211 - Maximun Subarray (파이썬)
[실버 4] 백준 10211 - Maximun Subarray (파이썬)
2025.04.30 -
[골드 4] 백준 12886 - 돌 그룹 (파이썬)
[골드 4] 백준 12886 - 돌 그룹 (파이썬)
2025.04.29 -
[실버 1] 백준 3184 - 양 (파이썬)
[실버 1] 백준 3184 - 양 (파이썬)
2025.04.29
댓글을 사용할 수 없습니다.