[실버 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))
'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