diff --git a/workbook_7319/silver/2579-s3.py b/workbook_7319/silver/2579-s3.py new file mode 100644 index 0000000..96b4bef --- /dev/null +++ b/workbook_7319/silver/2579-s3.py @@ -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] 설정이 안되므로 조건문을 달아준다. +""" \ No newline at end of file