@Eeap
velog
@Eeap
전체 방문자
오늘
어제
  • 전체 (168)
    • osam (1)
    • Cloud (21)
      • Docker (2)
      • AWS (13)
    • AI & Data (7)
    • Algorithm (76)
      • Baekjoon (75)
      • Codeforces (1)
    • Language (18)
      • Java (18)
    • Back-end (17)
      • Spring (3)
      • JSP & Servlet (12)
      • Go (2)
    • 일상 (4)
    • 기타 (8)
    • git (1)
    • Infra (9)
      • Apache Kafka (5)
      • Kubernetes (4)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • AWS CodeCatalyst
  • AWS CodeStar
  • flink
  • sagemaker unified studio
  • 인터페이스
  • bedrock api
  • converse api
  • bedrock agent
  • AWS CodeArtifact
  • 오블완
  • CLASS
  • java
  • 티스토리챌린지
  • Python
  • 심폴릭링크
  • SageMaker
  • bedrock
  • Agent
  • knowledge bases
  • invokemodel api

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Algorithm/Baekjoon

10844번 파이썬

2022. 3. 17. 19:20
반응형

처음엔 n-1자릿수의 계단 수에 +-1을 더해서 n자리수의 계단 수를 구하는 방식으로 풀었는데

이 방식은 시간 초과뿐만 아니라 메모리도 초과됨...

import sys
input = sys.stdin.readline

n = int(input())
'''
dx = [-1,1]
stairs=[1,2,3,4,5,6,7,8,9]
if n >= 2:
    for i in range(2,101):
        if n-i < 0:
            break
        #[i-2] 에 접근
        ary=[]
        for item in stairs:
            for k in range(2):
                #끝자리만 확인
                s_item=str(item)
                x = int(s_item[len(s_item)-1])+dx[k]
                if 0<=x<=9:
                    txt=s_item+str(x)
                    ary.append(int(txt))
        stairs=ary
print(len(stairs))
'''

다른 사람의 방식을 봤더니 대부분 규칙을 이용한 dynamic programming 기법을 이용하는것 같음

끝자리가 0인 경우는 1의 의해서만 영향을 받기 때문에 j=0일 때는 새로운 dp값은 dp[i-1][1]이 되고

끝자리가 9인 경우는 8의 의해서만 영향을 받기 때문에 j=9일 때 마찬가지로 dp[i-1][8]이 된다.

나머지의 경우인 1 ~ 8은 그 전 순서의 자릿 수에 +-1에 영햐ㅐㅇ을 받으므로 dp[i-1][j-1]+dp[i-1][j+1]이 된다.

import sys
input = sys.stdin.readline

n = int(input())

dp = [[0]*10 for _ in range(n+1)]

#n의 길이가 1일 경우 전부다 하나
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 > Baekjoon' 카테고리의 다른 글

7569번 파이썬  (0) 2022.03.20
2644번 파이썬  (0) 2022.03.20
2667번 파이썬  (0) 2022.03.17
2606번 파이썬  (0) 2022.03.16
2178번 파이썬  (0) 2022.03.16
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • 7569번 파이썬
    • 2644번 파이썬
    • 2667번 파이썬
    • 2606번 파이썬
    @Eeap
    @Eeap

    티스토리툴바