소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드스테이츠
  • 알고리즘
  • 패캠챌린지
  • 문제
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 직장인인강
  • 백준
  • 직장인자기계발
  • 패스트캠퍼스
  • 패스트캠퍼스후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Baekjoon] 2579번 : 계단 오르기

2022. 1. 20. 23:24

실버 3

 

2579번: 계단 오르기

계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. <그림 1>과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점

www.acmicpc.net

 

 

문제 풀이

계단이 3개 보다 작으면 모든 계단을 밟는 것이 무조건 최대이다. 

하지만 3개 이상일 경우엔 연속으로 세 개의 계단을 밟을 수 없기 때문에 두 가지 경우로 나누어 생각을 해볼 수 있다.

 

1) 한 칸 이전(n-1)에서 n번째 칸으로 온 경우

연속 두 개의 계단을 밟은 셈이므로 n-2칸은 밟을 수 없다.

따라서 n-3까지의 최대 점수에 한 칸 이전 계단의 비용과 현재 계단의 점수를 더한다.

2) 두 칸 이전(n-2)에서 n번째 칸으로 온 경우

연속이 되지 않기 때문에 그냥 n-2까지의 최대 점수에 현재 계단 점수를 더한다.

 

이 두개의 경우 중 큰 값이 n 번째 계단까지의 최대 점수가 된다.

 

코드

n = int(input())
stair = []
for _ in range(n):
    stair.append(int(input()))

cost = [0] * (n+1)
if n >= 1:
    cost[1] = stair[0]
if n >= 2:
    cost[2] = stair[0]+stair[1]

for i in range(3, n+1):
    a = cost[i - 3] + stair[i - 2] + stair[i - 1] # 한 칸 이 전에서 온 경우
    b = cost[i - 2] + stair[i - 1] # 두 칸 이 전에서 온 경우
    cost[i] = max(a, b)

print(cost[n])

 

728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 2156번 : 포도주 시식  (0) 2022.01.21
[Baekjoon] 1463번 : 1로 만들기  (0) 2022.01.20
[Baekjoon] 1149번 : RGB거리  (0) 2022.01.20
[Baekjoon] 9461번 : 파도반 수열  (1) 2022.01.19
[Baekjoon] 1904번 : 01타일  (0) 2022.01.19
    소토
    소토

    티스토리툴바