반응형
문제
https://www.acmicpc.net/problem/2579
2579번: 계단 오르기
계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점
www.acmicpc.net
코드
n = int(input())
score = [0 for _ in range(n+1)]
stair = [0 for _ in range(n+1)]
for i in range(1, n+1):
stair[i] = int(input())
score[1] = stair[1]
for i in range(2, n+1):
if i == 2:
score[i] = score[1] + stair[2]
elif i == 3:
score[i] = max(stair[1]+stair[3], stair[2]+stair[3])
else:
score[i] = max(score[i-2]+stair[i], score[i-3]+ stair[i-1]+stair[i])
print(score[n])
설명
직관적이지 않은 다이내믹 프로그래밍을 구현하는 문제이다.
각 계단에 도착했을 때의 최대 점수를 찾는 방식으로 풀어나가면 된다.
우선 점수와 계단의 리스트를 생성해 준다.
이후 계단의 리스트에 각 계단의 점수를 추가해 준다.
첫 계단을 밟았을 때의 점수는 첫 계단의 점수와 동일하므로 미리 지정해 준다.
이후 2번째 계단부터 계산을 하게 되는데,
2번째 계단의 최대 점수는 1번째와 2번째 모두 밟은 경우이므로 이를 입력해 준다.
3번째 계단부터는 경우의 수를 고려해야 한다.
연속해서 3 계단을 밟지 못하므로, 3번째 계단에 올라올 수 있는 경우의 수는
1번과 3번 계단 혹은 2번과 3번 계단 2가지의 경우가 있다.
이를 반영하여 두 수치 중 더 큰 수치를 입력해 준다.
나머지의 경우는 4번 계단으로 예시를 들어서 설명을 하면,
4번 계단을 올라오며 가능한 경우의 수는
1번 3번 4번, 혹은 1번 2번 4번의 경우가 있다.
이 중 1번 2번 4번을 밟는 경우는 1번과 2번을 밟은 점수가 2번에 기록되어 있으므로 이를 사용하여 점수를 계산해준다.
이후 스코어를 출력해주면 된다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 11659: 구간 합 구하기 4 (0) | 2023.02.17 |
---|---|
[파이썬, Python] 백준 1463: 1로 만들기 (0) | 2023.02.16 |
[파이썬, Python] 백준 9461: 파도반 수열 (0) | 2023.02.14 |
[파이썬, Python] 백준 24416: 피보나치 수 1 (0) | 2023.02.13 |
[파이썬, Python] 백준 4153: 직각삼각형 (0) | 2023.02.10 |