풀이
문제에서 주어진 규칙에 따라 N줄을 내려가면서 최댓값과 최솟값을 구하면 되는 문제다.
주어진 규칙을 살펴보자.
별의 위치에 따라 더하거나 뺄수 있는 칸의 범위가 달라진다.
이번에는 아래 그림을 살벼보자
별이 기준이 아닌, 동그라미를 기준으로 각각 빨,초,파의 선을 그었다.
첫 번째 칸에 위치한 동그라미는 첫 번째와 두 번째의 별에 대해 더하거나 뺄 수 있다는 의미이다.
앞으로 계산해야되는 칸을 각각 max_dp, min_dp에 담아주자.
1번 줄은 그대로 담으면 된다.
2번 줄 부터 N번 줄까지는 위에서 말했듯 동그라미를 기준으로 계산하듯이 계산해주면 된다.
각각 max_dp와 min_dp를 구하는 코드이다.
코드가 너무 길다고 생각된다면 아래처럼 쌍으로 묶어주어 관리해도 된다.
dp[0] = [ [ board[0] + max(dp[0][0], dp[0][1]) ], [ board[0] + min(dp[0][0], dp[0][1]) ] ]
하지만 가독성이 떨어진다.
참고로 문제의 접근방식과는 큰 상관은 없지만 메모리 제한이 4MB이기 때문에
모든 줄에 대한 정보를 계속 저장하는 방식을 하면 메모리 초과가 발생한다.
어차피 한 번쓰고 다시 안쓸 각 줄마다의 초기 정보를 매번 새롭게 입력받는 방식으로 바꾸어 주자.
소스코드
출처
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 21631] Checkers [Python] (0) | 2023.06.22 |
---|---|
[백준 25192] 인사성 밝은 곰곰이 [Java] (0) | 2023.06.20 |
[백준 1865] 웜홀 [Python] (0) | 2023.06.17 |
[백준 3932] Unreliable Messengers [Python] (0) | 2023.06.16 |
[백준 28224] Final Price [Python] (0) | 2023.06.15 |