땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • D
  • E
  • 이것이 리눅스다 with Rocky Linux9
  • I

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

##백준 15990 1, 2, 3 더하기5
Algorithm/Algorithm Problem

##백준 15990 1, 2, 3 더하기5

2021. 10. 29. 20:24

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

 

15990번: 1, 2, 3 더하기 5

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.

www.acmicpc.net

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

단, 같은 수를 두 번 이상 연속해서 사용하면 안 된다.

  • 1+2+1
  • 1+3
  • 3+1
  • 2+2  는 사용불가

정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

 

import sys
input = sys.stdin.readline

dp = [[0, 0, 0, 0] for i in range(100001)]
dp[1] = [0, 1, 0, 0]
dp[2] = [0, 0, 1, 0]
dp[3] = [0, 1, 1, 1]

for i in range(4, 100001):
    dp[i][1] = (dp[i - 1][2] + dp[i - 1][3]) % 1000000009
    dp[i][2] = (dp[i - 2][1] + dp[i - 2][3]) % 1000000009
    dp[i][3] = (dp[i - 3][1] + dp[i - 3][2]) % 1000000009

t = int(input())
for i in range(t):
    n = int(input())
    print(sum(dp[n]) % 1000000009)

1,2,3을 몇번 썼는지 나타내는 리스트를 먼저 선언하면 좋겠다는 생각을 했다.

즉, 다이나믹 프로그래밍으로 접근을 해보았다.

편리함을 위해 index 0은 0으로 초기화하고 크기가 4인 리스트를 만들었다.

이 리스트는 각 정수마다 일대일대응으로 만들기 위해

dp = [[0, 0, 0, 0] for i in range(100001)]

이런식으로 접근 했다.

 

기존 뼈대 아이디어는

DP[n] = n을 1,2,3의 합으로 나타낼 수 있는 경우의 수

DP[n] = DP[n-1] + DP[n-2] + DP[n-3] (n>=3)

 

출처 : https://codingexplore.tistory.com/26

 

 

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

백준 6064 카잉 달력  (0) 2021.11.04
백준 17427 약수의 합2  (0) 2021.11.02
백준 11052 카드 구매하기  (0) 2021.10.29
백준 1406 에디터  (0) 2021.10.19
백준 1018 체스판 다시 칠하기  (0) 2021.10.13
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 6064 카잉 달력
    • 백준 17427 약수의 합2
    • 백준 11052 카드 구매하기
    • 백준 1406 에디터
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바