[백준]10844번 쉬운 계단 수 - DP

2021. 2. 12. 16:53·SW개발/코딩테스트

 

n = int(input())

dp = [[0] * 10 for i in range(n)]  # 0~9의 인덱스를 가지고, n의 자릿수를 가진 이중 리스트 초기화.
dp[0] = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]  # 한자리 숫자일 때 미리 초기화.

for i in range(1, n):
    for j in range(10):
        if j == 0:  # 0이면 전 자릿수의 j+1 만 더함
            dp[i][j] = dp[i - 1][j + 1]
        elif j == 9:  # 9 이면 전 자릿수의 j-1 만 더함
            dp[i][j] = dp[i - 1][j - 1]
        else:  # 1~8 은 전 자릿수의 j-1, j+1 이 올 수 있으므로 두개를 더함
            dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]

print(sum(dp[n - 1]) % 1000000000)  # 출력

 

 코드 설명

이중 dp 리스트를 활용하여 문제를 풀이한다. 먼저 0~9의 인덱스를 가지는 리스트를 위해 *10 만큼 설정한다. 또한 자릿수를 위해 n만큼의 이중리스트를 생성한다.

한자리 숫자일 경우에는 1~9의 인덱스 모두가 자신이 계단수 이므로 1로 초기화 하여 준다. (0 인덱스는 사용하지 않는다)

두자리 숫자의 경우부터 반복을 진행하면서 조건에 맞게 점화식으로 계산한 후 출력한다.

 

Point : 2자리수 이상부터는 점화식을 통해 판별해야 한다.

만약 끝나는 수가 0이라면 이전 수에는 1만 올 수 있다. 9의 경우에는 이전 수로 8만 올 수 있다. 그 외의 경우에는 +- 1의 숫자가 올수 있다.

3가지의 case를 만들 수 있다.

case 1 : 마지막 자리가 0으로 끝나는 경우 -> 전 자릿수에 1만 올 수 있다. 따라서 dp[i-1][j+1] 의 값을 이용한다.

case 2 : 마지막 자리가 9로 끝나는 경우 -> 전 자릿수에 8만 올 수 있다. 따라서 dp[i-1][j-1]의 값을 이용한다.

case 3 : 그 외의 경우 -> dp[i-1][j-1] + dp[i-1][j+1] 의 값을 이용한다.

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[백준]11053번 가장 긴 증가하는 부분 수열 - DP  (0) 2021.02.14
[백준]2156번 포도주 시식 - DP  (0) 2021.02.13
[백준]1463번 1로 만들기 - DP  (0) 2021.02.11
[백준]2579번 계단 오르기 - DP  (0) 2021.02.10
[백준]1932번 정수 삼각형 - DP  (0) 2021.02.09
'SW개발/코딩테스트' 카테고리의 다른 글
  • [백준]11053번 가장 긴 증가하는 부분 수열 - DP
  • [백준]2156번 포도주 시식 - DP
  • [백준]1463번 1로 만들기 - DP
  • [백준]2579번 계단 오르기 - DP
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트리 #AVL #알고리즘 #자료구조
    플레이스토어
    배공파용
    g
    라이프 스타일
    오픈소스
    어플리케이션
    배달비 공유
    음식
    django
    Contributor
    배달
    컨트리뷰터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[백준]10844번 쉬운 계단 수 - DP
상단으로

티스토리툴바