티스토리 뷰
반응형
문제:www.acmicpc.net/problem/15988
이 문제는 1,2,3더하기 5 에서 경험했던 것을 토대로 풀었다. 맞긴 맞았는데 시간에 대한 개선이 필요한 것 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import sys
N=int(sys.stdin.readline().rstrip())
loc=0
mod=1000000009
li=[]
for _ in range(N):
li.append(int(sys.stdin.readline().rstrip()))
loc=max(loc,li[-1])
dp = [[0]*(3+1) for _ in range(loc+1)]
dp[1]=[0,1,0,0]
dp[2]=[0,1,1,0]
dp[3]=[0,2,1,1]
for i in range(4,loc+1):
dp[i][1]=(dp[i-1][1]+dp[i-1][2]+dp[i-1][3])%mod
dp[i][2]=(dp[i-2][1]+dp[i-2][2]+dp[i-2][3])%mod
dp[i][3]=(dp[i-3][1]+dp[i-3][2]+dp[i-3][3])%mod
for i in li:
print((dp[i][1]+dp[i][2]+dp[i][3])%mod)
|
cs |
풀이법은 예를 들어 5라는 숫자는 1+ (4를 구성하는 갯수), 2+(3을 구성하는 갯수),3+(2를 구성하는 갯수) 이런 원리로 풀었다. 근데 가만히 생각해보니깐 이렇게 나눌 필요 없이 그냥 dp[i]=dp[i-1]+dp[i-2]+dp[i-3]으로 풀어도 될 것 같다는 생각이 들어서 했는데 맞았다. 물론 dp[0]=1이라는 예외가 있긴 하지만 말이다.
1
2
3
4
5
6
7
8
9
10
|
dp = [0]*1000001
dp[0]=1;dp[1]=1;dp[2]=2
for i in range(3,1000001):
if dp[i]==0:
dp[i] = dp[i-1]+dp[i-2]+dp[i-3]
dp[i] %= 1000000009
for _ in range(int(input())):
n = int(input())
print(dp[n])
|
cs |
그러면 위와 같은 코드가 나온다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
RGB거리2 17404번 백준 (0) | 2020.12.04 |
---|---|
카잉 달력 6064번 백준 (0) | 2020.12.04 |
가장 긴 증가하는 부분 수열 4 14002번 백준 (0) | 2020.12.02 |
합분해 2225번 백준 (0) | 2020.12.02 |
제곱수의 합 1699번 백준 (0) | 2020.12.02 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 그래프
- django
- Spring
- Collections
- Linux
- setattr
- 카카오
- Pattern
- BFS
- dockerignore
- 2021 KAKAO BLIND RECRUITMENT
- env
- ubuntu
- headers
- postgres
- PostgreSQL
- docker
- 백준
- docker-compose
- 알고리즘
- Command Line
- 프로그래머스
- Java
- 파이썬
- Celery
- 자바
- 면접
- Python
- thread
- DRF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함