[BOJ]9465. 스티커
2024. 8. 28. 15:18ㆍ[Algorithm]/문제 풀이
문제
https://www.acmicpc.net/problem/9465
사용 알고리즘
DP
풀이
고려사항
이전 열(다른 행)의 스티커 가중치가 현재 가질 수 있는 스티커 가중치의 최대인지
후기
이 문제의 keypoint는 행이 2개로 고정되어 있으며 점수는 음수가 아닌 것이다.
점수가 음수가 아닌 이상 이전 2칸 이상을 고려하지 않아도 된다.
처음에는 현재 열이 j이면 0 ~ j-2까지의 리스트 전체에서 max값과 이전 열의 다른 행을 비교했다.
하지만 이건 불필요한 작업이였고 다른 행의 이전 2개만 비교하면 된다.
그 이전은 이후에 가중치가 음수가 아니기 때문에 하나라도 더 선택하는 것이 큰 값이 되기 때문이다.
코드
import sys
input = sys.stdin.readline
T = int(input())
for tc in range(1, T + 1):
N = int(input())
stickers = [list(map(int, input().split())) for _ in range(2)]
dp = [[0] * N for _ in range(2)]
# 초기값 세팅
dp[0][0], dp[1][0] = stickers[0][0], stickers[1][0]
if N > 1:
dp[0][1] = stickers[0][1] + dp[1][0]
dp[1][1] = stickers[1][1] + dp[0][0]
# 최대값 탐색
for i in range(2, N):
dp[0][i] = stickers[0][i] + max(dp[1][i - 1], dp[1][i - 2])
dp[1][i] = stickers[1][i] + max(dp[0][i - 1], dp[0][i - 2])
print(max(dp[0][N - 1], dp[1][N - 1]))
결과
'[Algorithm] > 문제 풀이' 카테고리의 다른 글
[BOJ]1806. 부분합 (0) | 2024.09.09 |
---|---|
[BOJ]5636. 소수 부분 문자열 (0) | 2024.09.09 |
[BOJ]17144. 미세먼지 안녕! (2) | 2024.08.28 |
[BOJ]2638. 치즈 (0) | 2024.08.27 |
[BOJ]14226 : 이모티콘 (0) | 2024.08.26 |