2579-s3 성공
This commit is contained in:
40
workbook_7319/silver/2579-s3.py
Normal file
40
workbook_7319/silver/2579-s3.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# 계단 오르기
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
input = sys.stdin.readline
|
||||||
|
|
||||||
|
def solution():
|
||||||
|
n = int(input().rstrip())
|
||||||
|
|
||||||
|
score = [0] * (n+1)
|
||||||
|
|
||||||
|
for i in range(1, n+1):
|
||||||
|
score[i] = int(input().rstrip())
|
||||||
|
|
||||||
|
dp = [0] * (n+1)
|
||||||
|
dp[1] = score[1]
|
||||||
|
if n >= 2:
|
||||||
|
dp[2] = score[1] + score[2]
|
||||||
|
|
||||||
|
for i in range(3, n+1):
|
||||||
|
dp[i] = max(dp[i-3]+score[i-1]+score[i], dp[i-2]+score[i])
|
||||||
|
|
||||||
|
print(dp[n])
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
solution()
|
||||||
|
|
||||||
|
"""
|
||||||
|
걸린 시간: 20분
|
||||||
|
|
||||||
|
시간 복잡도: 각 계단을 한번씩 확인하며 dp를 채우기 때문에 O(n)이다.
|
||||||
|
|
||||||
|
해설: 현재 보는 계단을 오려면 어떻게 올 수 있는지 생각했을 때 방향이 한쪽으로 정해져있다. 무조건 올라오는 것이기 때문에 dp를 쓰면 된다.
|
||||||
|
현재 칸으로 올 수 있는 경우의 수는 2칸 전에서 올라오는 것과 1칸 전에서 올라오되, 그 전에 1칸 점프가 아니어야 한다.(3칸연속 방지)
|
||||||
|
따라서 2번째 경우의 수는 2번째 전 상황까지 강제를 해줘야 한다. 따라서 dp[i-3]+score[i-1]+score[i]가 되는 것이다.
|
||||||
|
또한 i-3을 접근하려면 i가 최소 3부터여야 하기 때문에 dp[1], dp[2]까지는 수동으로 설정해줘야 한다.
|
||||||
|
마지막으로 n은 자연수이므로 1일수도 있다. 이때는 dp[2] 설정이 안되므로 조건문을 달아준다.
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user