일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 백준
- BFS
- 프로그래머스
- java #자바 #나동빈
- java #자바 #생활코딩
- 코딩테스트
- 재귀
- react #리액트 #동빈나 #나동빈 #유튜브강의
- 자바 #java
- Dijkstra
- DFS
- 백준 #파이썬 #알고리즘 #코딩테스트
- dp
- css #웹 #생활코딩
- java #자바
- 프로그래머스 #파이썬 #알고리즘 #코딩테스트
- PYTHON
- 파이썬 #알고리즘 #코딩테스트 #프로그래머스
- css #생활코딩 #웹
- 파이썬
- 알고리즘
- 투포인터
- 백준 #알고리즘 #파이썬 #코딩테스트
- 다익스트라
- 백트랙킹
- react #리액트 #동빈나
- 다이나믹프로그래밍
- java #자바 #동빈나
- 파이썬 #백준 #알고리즘 #코딩테스트
- 프로그래머스 #파이썬 #코딩테스트 #알고리즘
Archives
- Today
- Total
커리까지
백준 2579번 계단 오르기 파이썬 본문
728x90
SMALL
문제
입력
입력의 첫째 줄에 계단의 개수가 주어진다.
둘째 줄부터 한 줄에 하나씩 제일 아래에 놓인 계단부터 순서대로 각 계단에 쓰여 있는 점수가 주어진다. 계단의 개수는 300이하의 자연수이고, 계단에 쓰여 있는 점수는 10,000이하의 자연수이다.
출력
첫째 줄에 계단 오르기 게임에서 얻을 수 있는 총 점수의 최댓값을 출력한다.
예제 입력 1
6
10
20
15
25
10
20
예제 출력 1
75
제출 답안
n = int(input())
array = [ int(input()) for _ in range(n)]
d = [0] * 10000
d[0] = array[0]
if n > 3:
d[1] = array[0] + array[1]
d[2] = max(array[0] + array[2], array[1] + array[2])
for i in range(3, n):
d[i] = max(d[i-2]+array[i],d[i-3]+array[i]+array[i-1])
print(d[n - 1])
elif n == 1:
print(d[0])
elif n == 2:
d[1] = array[0] + array[1]
print(d[1])
elif n == 3:
d[1] = array[0] + array[1]
d[2] = max(array[0] + array[2], array[1] + array[2])
print(d[2])
- 마지막 계단 기준으로 마지막은 밟아야하니 마지막과 마지막전, 혹은 마지막과 두번째전 이렇게 봐야한다.
- 즉 자기가 마지막 계단이라고 생각하면 위의 식처럼 짜면 된다.
- 그래서 3까지는 계산해주고 나머지는 다이나믹으로 돌리면 된다.
- 그대신 3까지는 개별적으로 만들어야 인덱스오류가 안난다.
728x90
LIST
'알고리즘 > 풀이' 카테고리의 다른 글
백준 9205번 맥주 마시면서 걸어가기 파이썬 (0) | 2021.02.20 |
---|---|
백준 14938번 서강그라운드 파이썬 (0) | 2021.02.20 |
백준 2512번 예산 파이썬 (0) | 2021.02.16 |
백준 1302번 베스트셀러 파이썬 (0) | 2021.02.15 |
백준 1764번 듣보잡 파이썬 (0) | 2021.02.13 |
Comments