백준 2579번 - 계단 오르기

2021. 6. 4. 13:44· 백준 문제풀이(파이썬)/동적 계획법 1

 

계단을 오르면서 밟는 발판의 최댓값을 구하는 문제다. 이전에 풀었던 삼각형 문제나 집 색깔 문제처럼 뒤에서 차례대로 더하면서 갱신해주는 방식을 생각했지만, 경우가 깔끔하게 나뉘는 것도 아니었고 규칙이 있는 것도 아니었다. 꼭 나눠줘야 하는 경우는 i번째 발판(s[i-1])을 밟기 전에 바로 전 발판(s[i-2])을 밟았는지 전전 발판(s[i-3])을 밟았는지 경우를 나누어 주고, 바로 전 발판(s[i-2])을 밟았다면 그 바로 전 발판(s[i-3])은 밟지 못하기 때문에, 전전 발판(s[i-4])까지 밟기까지의 경우의 최댓값(dp[i-3])에 s[i-1] 값과 s[i]값을 더해준 경우와 전전 발판(s[i-3])을 밟은 경우의 최대값을 비교해서 큰 값을 dp에 append 해주면 i번째 발판까지의 최대값이 구해지기 때문에, 답을 구할 수 있다.

 

##함수 선언 부분##
import sys
##변수 선언 부분##
s = []
dp = []
##메인 함수 부분##
if __name__ == "__main__":
    N = int(input())
    for i in range(N):
        s.append(int(input()))
    dp.append(s[0]) #N=1인 경우
    if N == 1:
        print(dp.pop())
        sys.exit(0)
    dp.append(s[0]+s[1]) #N=2인 경우
    if N == 2:
        print(dp.pop())
        sys.exit(0)
    dp.append(max(s[0]+s[2], s[1]+s[2])) #N=3인 경우
    for i in range(3,N): #N>3인 경우
        dp.append(max(dp[i-3] + s[i-1] + s[i], dp[i-2] + s[i]))
    #마지막 발판을 밟아야하기 때문에, 바로 그 전 발판을 밟은 경우의 최댓값과, 전전 발판을 밟은 경우의 최댓값 중
    #큰 값을 비교해야 된다.
    print(dp.pop())

규칙도 안보이고 경우를 나눌 때도 기준이 없어서 어려웠다. 조건이 주어질 때 어떤 식으로 경우를 나누어 줘야할 지 생각을 많이 해보는 것이 중요할 것 같다. 

저작자표시

'백준 문제풀이(파이썬) > 동적 계획법 1' 카테고리의 다른 글

백준 10844번 - 쉬운 계단 수  (0) 2021.06.09
백준 1463번 - 1로 만들기  (0) 2021.06.04
백준 1932번 - 정수 삼각형  (0) 2021.06.02
백준 1149번 - RGB거리  (0) 2021.06.01
백준 9461번 - 파도반 수열  (0) 2021.06.01
'백준 문제풀이(파이썬)/동적 계획법 1' 카테고리의 다른 글
  • 백준 10844번 - 쉬운 계단 수
  • 백준 1463번 - 1로 만들기
  • 백준 1932번 - 정수 삼각형
  • 백준 1149번 - RGB거리
aodtns
aodtns
인생은 새옹지마
aodtns
맹의 코딩 기록장
aodtns
전체
오늘
어제
  • 카테고리 (116)
    • BE (22)
      • JSP (6)
      • Spring Boot (12)
      • Node.js (1)
      • Docker (1)
      • JPA (1)
    • AI (12)
      • 머신 러닝(ML) (11)
      • 딥 러닝(DL) (1)
    • 네트워크 (7)
      • 네트워크 기본 (1)
      • AWS (6)
    • DB (1)
      • SQL (1)
    • FE (11)
      • HTML (4)
      • CSS (5)
      • JS (1)
      • React (1)
    • CS (1)
      • Back End (0)
      • 디자인패턴 & 방법론 (1)
      • 컴퓨터 구조 & 운영체제 (0)
    • VCS (1)
    • 기획(UI, UX) (1)
      • 소프트웨어 마에스트로 (1)
    • 이코테 (13)
      • 그리디 (1)
      • 구현 (1)
      • DFS, BFS (1)
      • 정렬 (7)
      • 이진 탐색 (1)
      • 다이나믹 프로그래밍 (1)
      • 최단 경로 (0)
      • 그래프 이론 (0)
      • 부록 (1)
    • 백준 문제풀이(파이썬) (44)
      • 기본 수학 1 (1)
      • 기본 수학 2 (4)
      • 재귀 (2)
      • 브루트 포스 (2)
      • 정렬 (0)
      • 백트래킹 (5)
      • 동적 계획법 1 (15)
      • 그리디 알고리즘 (3)
      • 정수론 및 조합론 (2)
      • 스택 (1)
      • 큐, 덱 (1)
      • 분할 정복 (4)
      • 이분 탐색 (2)
      • 우선순위 큐 (2)
    • 일상 (3)

블로그 메뉴

  • 💼 깃허브
  • 📄이력서

인기 글

최근 글

hELLO · Designed By 정상우.v4.2.1
aodtns
백준 2579번 - 계단 오르기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.