반응형
https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
Hint
dynamic programming을 이용
계단을 밟을 경우를 두 가지로 나누어서 생각하자.
(i번째 계단을 밟을 경우 i-1번째를 밟고 오는 경우와
i-2번째를 밟고 오는 경우로 나누자)
Solution
T=int(input())
L=[]
for i in range(T):
L.append(int(input()))
if T==1:
print(L[0])
else:
L[0]=[L[0],L[0]]
L[1]=[L[0][0]+L[1],L[1]]
for i in range(2, T):
L[i]=[L[i]+L[i-1][1], L[i]+max(L[i-2])]
print(max(L[T-1]))
T=계단 개수
L=계단 리스트
12번 line을 보면
L[i]를 특이하게 설정한 것을 볼 수 있습니다.
L[i]+L[i-1][1]은 기존 i번째 계단의 값과 그 전 i-1번째 계단의 값을
더한 것으로 볼 수 있는데
i-1번째 계단의 값은 그 동안 밟아온 계단의 값이 이미 더해져 있습니다.
즉, i-1번째에 30, 20, 25라는 계단을 밟고 왔으면
i-1번째 계단의 값은 L[i-1][1]=75가 되어있을 겁니다.
두 번째로는 L[i]+max(L[i-2])입니다.
해당 코드는 계단을 건너 뛰어서 밟은 경우입니다.
즉, i-2번째 계단을 밟고 i번째 계단을 밟을 때는
i-2번째 계단을 밟았을 동안의 결과 중 가장 큰 값을 가져오면 됩니다.
(i-2번째까지 하나밟고 한 번 뛰고 등등 모든 과정 무시)
for 구문을 돌리고 나면 L[i]=[i-1번째 계단을 밟은 값, i-2번째 계단을 밟은 값]으로
설정됩니다
반응형
'백준(BOJ)' 카테고리의 다른 글
[백준] 10872번 팩토리얼 : 파이썬(python) 설명 (0) | 2021.10.26 |
---|---|
백준 알고리즘을 시작하기 전 알면 좋은 코드 모음 #1 (0) | 2021.10.24 |
[백준] 11053번 가장 긴 증가하는 부분 수열 : 파이썬(python) 설명 (0) | 2021.10.23 |
[백준] 2231번 분해합 : 파이썬(python) 설명 (0) | 2021.02.24 |
[백준] 2579번 문제 풀이 : 파이썬(python) 코드 설명 (0) | 2021.02.17 |