티스토리 뷰
반응형
문제:www.acmicpc.net/problem/15990
처음에 이 문제를 접 했을 때 기존 더하기 문제와 같이 피보나치의 꼴처럼 이전의 값을 단순히 더해나가면 될 줄 알았다. 그래서 문제의 푸는 방향을 오로지 총 갯수의 상관관계만 봤는데 그렇게 접근하면 안됐다. 이 문제는 사실 RGB거리 문제와 유사한 문제라 볼 수 있다. 방향성을 한 번 잘 못 잡으니깐 다른 방법이 생각이 나질 않았다. ㅠㅠ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
MAX = 100000
mod = 1000000009
DP = [[0]*(3+1) for _ in range(MAX+1)]
DP[0] = [0, 0, 0, 0]
DP[1] = [0, 1, 0, 0]
DP[2] = [0, 0, 1, 0]
DP[3] = [0, 1, 1, 1]
for i in range(4, MAX + 1):
DP[i][1] = (DP[i - 1][2] + DP[i - 1][3]) % mod
DP[i][2] = (DP[i - 2][1] + DP[i - 2][3]) % mod
DP[i][3] = (DP[i - 3][1] + DP[i - 3][2]) % mod
for _ in range(int(input())):
N = int(input())
print(sum(DP[N])% mod)
#참고 https://br-brg.tistory.com/9
|
cs |
코드참고:br-brg.tistory.com/9
위의 풀이법은 이렇다.
처음이 1이 있다면 다음에 올 숫자는 2 아니면 3이다. 그러므로 이전 단계의 DP[i-1]에서 2와 3의 값을 더하고, 처음이 2라면 1또는 3이므로 DP[i-2]에서 1과 3의 값을 더해나가는 식이다.
그렇게 하면 다음 와래와 같은 관계를 도출 해낼 수 있다.
1
2
3
4
5
|
for i in range(4, MAX + 1):
DP[i][1] = (DP[i - 1][2] + DP[i - 1][3]) % mod
DP[i][2] = (DP[i - 2][1] + DP[i - 2][3]) % mod
DP[i][3] = (DP[i - 3][1] + DP[i - 3][2]) % mod
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
합분해 2225번 백준 (0) | 2020.12.02 |
---|---|
제곱수의 합 1699번 백준 (0) | 2020.12.02 |
17299번 오등큰수 (0) | 2020.12.01 |
17298번 오큰수 (0) | 2020.12.01 |
10799번 쇠막대기 파이썬 (0) | 2020.12.01 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Command Line
- Collections
- Java
- Pattern
- dockerignore
- 그래프
- django
- Python
- 알고리즘
- PostgreSQL
- Celery
- 백준
- thread
- env
- postgres
- 자바
- 면접
- setattr
- docker-compose
- BFS
- 파이썬
- ubuntu
- 프로그래머스
- docker
- headers
- DRF
- Spring
- 카카오
- 2021 KAKAO BLIND RECRUITMENT
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함