728x90
반응형
https://www.acmicpc.net/problem/2240
2240번: 자두나무
자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어
www.acmicpc.net
문제 해결
- 정답이 이지선다형 문제이고 0, 1 둘 중 하나이다.
- 처음에 1을 선택하는 곳에 있다고 한다.
- 그러면 dp를 이용해 이동을 시키는 것을 목표로 한다.
- 처음에는 (w, t, answer) # 움직인 횟수, 시간, 정답 을 이용해서 dp[i][t]의 최댓값의 최댓값을 구하려고 했다.
- 하지만 움직인 횟수와 정답 선택간에 연관이 있었고 이를 표현하기 위해서는 오히려 더 간단한 코드가 편했다. (움직인 횟수가 홀수이면 2번을 선택한 것이고, 움직인 횟수가 짝수이면 1번을 선택한 것이다.)
- 이를 이후로 (t,w)리스트를 만들었고 정답이 1이고 w%2==0 일 때나 정답이 2이고 w%2==1일 때 1점을 더 주고 아닐 때는 이전 값의 최댓값을 가져오는 식으로 코드를 짰다.
CODE
import sys
input = sys.stdin.readline
t,w = map(int, input().split())
answer = [0]
for _ in range(t):
x = int(input())
answer.append(x)
dp = [[0]*(w+1) for _ in range(t+1)]
for i in range(1,t+1):
if answer[i] == 1: # 시작점이 1이고 한번도 안움직이는 경우 카운트
dp[i][0] = dp[i-1][0] + 1
else:
dp[i][0] = dp[i-1][0]
for j in range(1,w+1):
if answer[i] ==2 and j%2==1:
dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + 1
elif answer[i] == 1 and j%2 ==0:
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 1
else:
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j])
print(max(dp[t]))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2482 색상환 (0) | 2023.04.18 |
---|---|
[python] 백준 1788 피보나치 수의 확장 (0) | 2023.04.17 |
[python] 백준 2229 조 짜기 (0) | 2023.04.16 |
[python] 백준 15486 퇴사2 (0) | 2023.04.16 |
[python] 백준 1508 레이스 (0) | 2023.04.16 |
댓글