개발공부/algorithm

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

2021. 4. 13. 17:53
  • 백준 10844 쉬운 계단 수 Silver I
  • 문제링크
 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

나의 접근

DFS 로직으로 가장 뒷자리의 숫자에 +1, -1 한 경우에 대해 깊이우선 탐색을 진행해주고 N의 길이까지 탐색을 완료하면 count를 더 해주는 식으로 구현해봤는데.. 시간초과가 났다. 아래는 해당 코드다. 

import sys

def dfs(startnum, idx):
    global count
    change = [1, -1]
    if idx == N - 1:
        count += 1
        return count

    for calc in range(2):
        newnum = startnum + change[calc] #2
        if 0 <= newnum <= 9:
            if not visited[idx + 1][newnum]:
                visited[idx + 1][newnum] = 1
                dfs(newnum, idx + 1)
                visited[idx + 1][newnum] = 0

N = int(sys.stdin.readline())

if N == 1:
    print(9)

else:
    arr = [0 for _ in range(N)]
    count = 0
    for i in range(1, 10):
        # for tracking visited numbers
        visited = [[0] * 10 for _ in range(N)]
        dfs(i, 0)
    
    print(count % 1000000000)

역시나 나는 DP적 사고까진 아직 먼 것 같다..

다른 분의 접근을 참고해서 구현해본 코드다. 일의 자리에 0~9까지의 경우의 수를 1로 다 초기화시킨 다음에 자릿수를 하나씩 늘려가면서 이전 자릿수에서 경우의수를 받아오는 것이 로직의 관건이다. 

import sys
N = int(sys.stdin.readline())
dp = [[0 for i in range(10)] for _ in range(101)]

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

for i in range(2, N + 1):
    for j in range(10):
        if j == 0:
            dp[i][j] = dp[i - 1][1]
        elif j == 9:
            dp[i][j] = dp[i - 1][8]
        else:
            dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]
print(sum(dp[N]) % 1000000000)
저작자표시 (새창열림)

'개발공부 > algorithm' 카테고리의 다른 글

[프로그래머스][python] 위장 - Hash  (0) 2021.04.17
[프로그래머스][python] 가장 큰 수  (0) 2021.04.17
[백준][python] 9658.돌게임4 - DP  (0) 2021.04.11
[백준][python] 1793.타일링 - DP  (0) 2021.04.11
[백준][python] 2407.조합 - DP  (0) 2021.04.11
'개발공부/algorithm' 카테고리의 다른 글
  • [프로그래머스][python] 위장 - Hash
  • [프로그래머스][python] 가장 큰 수
  • [백준][python] 9658.돌게임4 - DP
  • [백준][python] 1793.타일링 - DP
so.py
so.py
실리콘 밸리에서 개발자로 살아남기 🌉 미국 유학생의 취준, 개발 공부 여정을 담습니다. #빅테크 #SW #샌프란
so.py
so.py
so.py
전체
오늘
어제
  • All (108)
    • Insights (9)
      • 미국 근무 일지 (3)
      • 국내 취업 일지 (4)
      • 휴학 일지 (1)
    • 개발공부 (87)
      • 개발 (11)
      • algorithm (76)
    • Data Science (9)
      • ML&AI (7)
      • etc (1)
    • Projects (3)
    • daily (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 네이버nlp인턴
  • 파이썬
  • SWEA
  • dynamicprogramming
  • twopointer
  • Python
  • Stack
  • kmeans
  • nlp
  • DP
  • 백준
  • 코딩테스트
  • binarysearch
  • tree
  • dfs
  • 네이버코테
  • BOJ
  • Baekjoon
  • leetcode
  • string
  • d2
  • Algorithm
  • bfs
  • 리트코드
  • greedy
  • programmers
  • 알고리즘
  • recursion
  • BERT
  • queue

최근 댓글

최근 글

hELLO · Designed By 정상우.
so.py
[백준][python]10844.쉬운계단수 - DP
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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