백준 / 2579번 / 계단 오르기 / python 파이썬

2024. 10. 8. 17:29·코딩테스트/백준 (python)

 

문제 : https://www.acmicpc.net/problem/2579

 

 

다이나믹 프로그래밍 (DP) 문제이다.  계단을 오르며 얻을 수 있는 최댓값을 구하면 되는 문제이지만 조건이 있다.

1. 한 번에 한 계단 혹은 두 계단씩 오를 수 있다.

2. 연속된 세 개의 계단을 밟을 수 없다.

3. 마지막 계단은 반드시 밟아야 한다.

 


이 세 조건을 만족시키며 답을 구하기 위해 다음과 같이 접근하였다.

1. 계단의 개수가 각각 1, 2개일 때

     계단의 점수를 더한 값을 출력한다.

 

2. 계단의 개수가 3개 이상일 때

  1) dp 테이블을 계단의 개수만큼 0으로 초기화하여 만든다.

  2) dp[0] = 첫 번째 계단의 점수 , dp[1] = 첫 번째 계단의 점수 + 두 번째 계단의 점수를 저장한다.

  3) dp[2]에 세 번째 계단을 밟을 때까지의 최댓값을 구하여 저장한다. 

  4) for문을 통해 세 번째 계단 이후부터 각 계단을 밟을 때의 최댓값을 구한다.

 

3. 세 번째 계단 이후부터 각 계단을 밟을 때의 최댓값 구하기

  1) 첫 번째 경로 ( dp[i-2] + stairs[i]) 

      - 두 계단 전에서 현재 계단으로 이동하는 경우 (연속된 두 계단을 밟음)

  2) 두 번째 경로 (dp[i-3] + stairs[i-1] + stairs[i])

     - 세 계단 전에서 한 계단을 건너뛰고 현재 계단으로 오는 경우 (세 계단을 연속으로 밟지 않고 건너뜀)

 

4. 두 경로의 점수 중 최댓값을 dp 테이블에 저장하여 dp[-1] , 총 점수의 최댓값을 구할 수 있다.   


 

나의 풀이

n = int(input())

stairs = [int(input()) for _ in range(n)]

if n == 1:
    print(stairs[0])
elif n == 2:
    print(stairs[0] + stairs[1])
else:
    dp = [0] * n
    dp[0] = stairs[0]
    dp[1] = stairs[0] + stairs[1]
    dp[2] = max(stairs[0] + stairs[2], stairs[1] + stairs[2])
    for i in range(3, n):
        dp[i] = max(dp[i-2] + stairs[i], dp[i-3] + stairs[i - 1] + stairs[i])

    print(dp[-1])

 

 

 

'코딩테스트 > 백준 (python)' 카테고리의 다른 글

백준 / 14940번 / 쉬운 최단거리 / python 파이썬  (0) 2024.10.17
백준 / 2293번 / 동전 1 / python 파이썬  (1) 2024.10.10
백준 / 1931번 / 회의실 배정 / python 파이썬  (2) 2024.10.02
백준 / 14888번 / 연산자 끼워넣기 / python 파이썬 / 백트래킹  (0) 2024.09.28
백준 /1912번 / 연속합 / python 파이썬  (0) 2024.09.27
'코딩테스트/백준 (python)' 카테고리의 다른 글
  • 백준 / 14940번 / 쉬운 최단거리 / python 파이썬
  • 백준 / 2293번 / 동전 1 / python 파이썬
  • 백준 / 1931번 / 회의실 배정 / python 파이썬
  • 백준 / 14888번 / 연산자 끼워넣기 / python 파이썬 / 백트래킹
seulll
seulll
개인 공부 / 정리 블로그입니다 https://github.com/seul1009
  • seulll
    seulll
    seulll
  • 전체
    오늘
    어제
    • 분류 전체보기 (346) N
      • 코딩테스트 (237) N
        • programmers (python) (158)
        • 백준 (python) (77) N
      • 자료구조 | 알고리즘 (14)
      • 개발 | 프로젝트 (44) N
        • Python (4)
        • Java | Spring (8) N
        • Android (5)
        • Unity (3)
        • API (4)
      • CS (15)
        • Network (5)
        • SQL (2)
        • OS (4)
      • 데이터 분석 (14)
      • 기타 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 글쓰기
    • 설정
  • 링크

    • GitHub
  • 인기 글

  • 태그

    Greedy
    백엔드
    티스토리챌린지
    백엔드 개발자
    API
    asterisk
    solving environment
    야근 지수
    파이썬
    코딩테스트
    Boxplot
    오차행렬
    박스플롯
    카카오맵
    confusion matrix
    2 x n 타일링
    모델 성능 평가
    kakao map api
    백엔드 개발자 역량
    train_test_split
    Python
    바다코끼리
    웹크롤링
    오블완
    대입 표현식
    그리디 알고리즘
    프렌즈4블록
    프로그래머스
    데이터분석
    카카오맵 api
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
seulll
백준 / 2579번 / 계단 오르기 / python 파이썬
상단으로

티스토리툴바