이 영역을 누르면 첫 페이지로 이동
포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

페이지 맨 위로 올라가기

포렌식 & 개발 이야기 - Forensics & Development

Pental - Forensics / iOS / Windows / Android / Kakaotalk / Telegram / Etc

백준 10844 - 쉬운 계단 수 (파이썬)

  • 2025.02.23 13:49
  • Programming/백준
글 작성자: pental

분류 : 다이나믹 프로그래밍

https://www.acmicpc.net/problem/10844

풀이

먼저 문제 이해를 하면 다음과 같다.

  1. 계단 수는 인접한 모든 자리의 차이가 1인 수이다.
  2. N이 주어질 때, 깊이가 N인 계단 수의 갯수를 구하는 문제이다.
  3. 0으로 시작하는 수는 계단 수가 아니다.
  4. 결과는 10^9로 나눈 나머지를 출력해야한다.

문제 풀이를 위해서 DP 알고리즘을 사용한다.

  1. dp[i][j]를 길이가 j이고 마지막 숫자가 i인 계단 수의 갯수라고 정의한다.
  2. 점화식을 세우면 다음과 같다.
    • dp[j][i] = dp[j-1][i-1] + dp[j+1][i-1]
    • 즉, 길이가 i이고 끝자리가 j인 계단 수는 이전 자리(i-1)에서 끝자리가 j-1이거나 j+1이었던 경우의 합이다.
  3. 초기 조건으로는
    • dp[0][1] = 0 (0으로 시작하는 계단 수는 불가능)
    • dp[i][1] = 1 (1~9까지의 숫자는 각각 한 자리 계단 수)

시간 복잡도 분석

  • N의 최대값은 100
  • dp 배열의 크기는 10 x N
  • 이중 for 루프 (10 * N번 연산)
  • 시간 복잡도: O(N)
  • O(N)O(N)

코드

# 백준 10844 - 쉬운 계단 수
# 분류 : 다이나믹 프로그래밍

import sys
input = sys.stdin.readline

N = int(input())
mod = 1000000000

dp = [[0] * (N + 1) for _ in range(10)] # 10 x (n + 1) 배열

dp[0][1] = 0
for i in range(1, 10) :
    dp[i][1] = 1

for i in range(2, N + 1) :
    for j in range(10) :
        dp[j][i] = 0

        if j > 0 :
            dp[j][i] += dp[j - 1][i - 1]
            dp[j][i] %= mod
        if j < 9 :
            dp[j][i] += dp[j + 1][i - 1]
            dp[j][i] %= mod

answer = 0
for i in range(10) :
    answer += dp[i][N]
    answer %= mod

print(answer)

저작자표시 비영리 (새창열림)

'Programming > 백준' 카테고리의 다른 글

백준 2015 - 수들의 합 4 (파이썬)  (0) 2025.02.24
백준 20365 - 블로그2 (파이썬)  (0) 2025.02.24
백준 14889 - 스타트와 링크 (파이썬)  (0) 2025.02.22
백준 11726 - 2 x n 타일링 (파이썬)  (0) 2025.02.21
백준 1759 - 암호 만들기 (파이썬)  (0) 2025.02.21

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 백준 2015 - 수들의 합 4 (파이썬)

    백준 2015 - 수들의 합 4 (파이썬)

    2025.02.24
  • 백준 20365 - 블로그2 (파이썬)

    백준 20365 - 블로그2 (파이썬)

    2025.02.24
  • 백준 14889 - 스타트와 링크 (파이썬)

    백준 14889 - 스타트와 링크 (파이썬)

    2025.02.22
  • 백준 11726 - 2 x n 타일링 (파이썬)

    백준 11726 - 2 x n 타일링 (파이썬)

    2025.02.21
다른 글 더 둘러보기

정보

포렌식 & 개발 이야기 - Forensics & Development 블로그의 첫 페이지로 이동

포렌식 & 개발 이야기 - Forensics & Development

  • 포렌식 & 개발 이야기 - Forensics & Development의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

카테고리

  • Category (452)
    • Forensics (105)
      • Magnet AXIOM (28)
      • Digital Forensics Informati.. (9)
      • Iphone Forensics (24)
      • DFC (7)
      • 디지털포렌식전문가2급 자격증 (10)
      • FTK ACE 자격증 (7)
    • 이것저것 (7)
      • Ubuntu (6)
      • 디스코드 봇 (4)
      • Volatility GUI (2)
    • CTF (32)
      • NEWSECU (14)
      • CTF-d (5)
      • Puzzel - Network Forensics (2)
      • Security Traps (2)
      • system32.kr (5)
      • HMCTF (4)
    • Programming (260)
      • C (10)
      • Python (11)
      • 백준 (206)
      • 프로그래머스 (32)
    • 그냥 개발 및 잡담 (16)
      • Docker (2)
      • Google Cloud (3)
      • OS 개발 (3)
    • Best of Best (20)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 파이썬
  • 백준
  • Forensics
  • pental
  • 프로그래머스
  • axiom
  • 포렌식
  • 디지털포렌식
  • 전체 보기…

정보

pental의 포렌식 & 개발 이야기 - Forensics & Development

포렌식 & 개발 이야기 - Forensics & Development

pental

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © pental.

티스토리툴바