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