@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)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
@Eeap

velog

Algorithm/Baekjoon

15990번 파이썬

2022. 3. 31. 23:12
반응형

처음엔 아래 코드처럼 p[n]을 구하기 위해서 p[n-1]에 앞뒤로 1을 붙여주거나 p[n-2]에 2를 붙여주거나 p[n-3]에 3을 붙여주는 방법으로 해봤는데 시간 초과 에러가 떴다.

import sys
input = sys.stdin.readline
t = int(input())
p = [(0) for _ in range(100002)]
div = 1000000009
p[1] = [['1']]
p[2] = [['2']]
p[3] = [['1', '2'], ['2', '1'], ['3']]
for _ in range(t):
  n = int(input())
  if n > 3:
    for num in range(4, n+1):
      if p[num] != 0:
        continue
      ary = []
      for i in range(1, 4):
        plus = list(str(i))
        for t in p[num-i]:
          back = t+plus
          front = plus+t
          check = False
          if front not in ary:
            for idx in range(len(front)-1):
              if front[idx] == front[idx+1]:
                check = True
            if not check:
              ary.append(front)
          if back not in ary:
            for idx in range(len(back)-1):
              if back[idx] == back[idx+1]:
                check = True
            if not check:
              ary.append(back)
      p[num] = ary
  print(len(p[n]) % div)

그래서 다른 사람 방법을 참고해봤더니 아래처럼

p[idx][1]에는 끝자리가 1로 끝나는 수의 개수를 저장하고 p[idx][2]와p[idx][3]도 마찬가지로 그 숫자로 끝나는 수의 개수를 저장했다.

끝에 1을 붙일 수 있는 경우의 수는 n이 idx-1번째 값중 2,3으로 끝날때이고

2를 붙일 수 있는 경우의 수는 n이 idx-2번째 값중 1,3으로 끝날때이고

3을 붙일 수 있는 경우의 수는 n이 idx-3번째 값중 1,2로 끝날때이다.

import sys
input = sys.stdin.readline
p = [[0 for _ in range(4)] for _ in range(100001)]
div = 1000000009

p[1] = [0,1,0,0]
p[2] = [0,0,1,0]
p[3] = [0,1,1,1]

for idx in range(4,100001):
  p[idx][1]=(p[idx-1][2]+p[idx-1][3])%div
  p[idx][2]=(p[idx-2][1]+p[idx-2][3])%div
  p[idx][3]=(p[idx-3][2]+p[idx-3][1])%div
t = int(input())
for _ in range(t):
  n = int(input())
  print(sum(p[n]) % div)
반응형
저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

5430번 파이썬  (0) 2022.04.01
2193번 파이썬  (0) 2022.03.31
11052번 파이썬  (0) 2022.03.30
14503번 파이썬  (0) 2022.03.29
2573번 파이썬  (0) 2022.03.28
    'Algorithm/Baekjoon' 카테고리의 다른 글
    • 5430번 파이썬
    • 2193번 파이썬
    • 11052번 파이썬
    • 14503번 파이썬
    @Eeap
    @Eeap

    티스토리툴바