|
| 1 | + |
| 2 | +#2023-05-04-Week3-과제 |
| 3 | +#2579_계단 오르기 |
| 4 | + |
| 5 | + |
| 6 | +import sys |
| 7 | +input = sys.stdin.readline |
| 8 | + |
| 9 | +n = int(input()) #계단 개수 |
| 10 | +score = [0 for i in range(301)] #계단 점수 리스트 -> 계단의 개수 300이하의 자연수 |
| 11 | +dynamic = [0 for i in range(301)] #동적 계획법 리스트 -> 계단의 개수 300이하의 자연수 |
| 12 | + |
| 13 | +for i in range(n) : |
| 14 | + score[i] = int(input()) #계단 개수만큼 점수 입력 |
| 15 | + |
| 16 | +''' |
| 17 | +마지막 도착 계단은 반드시 밟아야 함 |
| 18 | +-> 계단 개수 입력 값이 a일 때 |
| 19 | + 마지막 도착 계단인 a번 계단을 x번째 차례에 밟은 계단이라고 하면 |
| 20 | + x-1번째 차례에는 a-1번 계단이나 a-2번 계단을 밟았을 것 |
| 21 | +-> a-1번 계단을 밟았다면 a-2번째 계단은 밟을 수 없음 |
| 22 | +
|
| 23 | +해당 인덱스번째 계단까지의 최댓값을 |
| 24 | +동적 계획법 리스트에 저장 |
| 25 | +
|
| 26 | +i번 계단까지 최댓값 |
| 27 | += i-2번 계단까지 점수를 고려한 최댓값 + i번 계단의 점수 , |
| 28 | + i-3번 계단까지 점수를 고려한 최댓값 + i-1번 계단의 점수 |
| 29 | + 중 더 큰 값 (max로 비교) |
| 30 | +''' |
| 31 | + |
| 32 | +dynamic[0] = score[0] |
| 33 | +dynamic[1] = score[0] + score[1] |
| 34 | +dynamic[2] = max (score[1]+score[2], score[0]+score[2]) |
| 35 | + |
| 36 | +for i in range(3,n): |
| 37 | + dynamic[i] = max(dynamic[i-3]+score[i-1]+score[i], dynamic[i-2]+score[i]) |
| 38 | +print(dynamic[n-1]) |
| 39 | + |
| 40 | + |
| 41 | +########################################################################################### |
| 42 | +#미리 리스트의 공간을 모두 할당 받는(?)건 낭비인가? 싶어서 다시 작성해봤지만 런타임에러 뜸 |
| 43 | + |
| 44 | +n = int(input()) #계단 개수 |
| 45 | +score = [] #계단 점수 리스트 -> 계단 개수만큼만 할당 |
| 46 | +for x in range(n) : |
| 47 | + score.append(int(input())) |
| 48 | +dynamic = [] #동적 계획법 빈 리스트 |
| 49 | + |
| 50 | +if n == 1: |
| 51 | + dynamic.append(score[0]) |
| 52 | + print(dynamic[0]) |
| 53 | +elif n == 2 : |
| 54 | + dynamic.append(max(score[0]+score[1], score[1])) |
| 55 | + print(sum(score)) |
| 56 | +else : # n >= 3 |
| 57 | + ''' |
| 58 | + dynamic[0] = score[0] |
| 59 | + dynamic[1] = score[0] + soore[1] |
| 60 | + for i in range(2,n): |
| 61 | + dynamic[i] = max(dynamic[i-3]+score[i-1]+score[i], dynamic[i-2]+score[i]) |
| 62 | + print(score[-1]) |
| 63 | +
|
| 64 | + ''' |
| 65 | + dynamic.append(max(dynamic[i-2]+score[i] , dynamic[i-3]+score[i]+score[i - 1])) |
| 66 | + |
| 67 | +print(dynamic[-1]) #마지막으로 저장한 값 출력 -> d[n-1] == d[-1] == d.pop() |
| 68 | + |
| 69 | + |
0 commit comments