Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
| 31 |
Tags
- 플러터
- 코딩테스트
- Python
- 뷰
- 티스토리챌린지
- 항해99
- 99클럽
- 파이썬
- 개발자 취업
- C++
- 코딩테스트준비
- Flutter
- ML
- vue
- 코딩테스트 준비
- Laravel
- 코테 파이썬
- 알고리즘
- react
- 안드로이드
- c++ 코테
- til
- flutter getx
- 코테
- 파이썬 코테
- 오블완
- 라라벨
- 개발자취업
- DP
- 백준
Archives
- Today
- Total
잡다로그
[Python/코테] 백준 9095 1, 2, 3 더하기 본문
9095 1, 2, 3 더하기
문제 및 조건 설명: https://www.acmicpc.net/problem/9095

알고리즘 설계
💡Idea.
N이 작기 때문에, 10중 for문이나 백트래킹을 사용해서 풀 수 있다.
그러나 같은 조건에서 N이 커지면 dp가 아닌 다른 방법을 사용할 수 없다.
🎲Step.
1. 테이블 정의하기
D[i] = i를 1, 2, 3를 1, 2, 3의 합으로 나타내는 방법의 수
2. 점화식 찾기
ex) D[4] = ?
① 1+1+1+1 ② 3+1 ③ 2+1+1 ④ 1+2+1 → D[3] + 1
⑤ 1+1+2 ⑥ 2+2 → D[2] + 2
⑦ 1+3 → D[1] + 3
즉, D[4] = D[1] + D[2] + D[3]
D[i] = D[i-1] + D[i-2] + D[i-3]
3. 초기값 정하기
D[i] = D[i-1] + D[i-2] + D[i-3] 이므로 초기값이 최소 3개는 주어져야 한다.
D[1] = 1
D[2] = 2
D[3] = 4
알고리즘 구현
✔️n이 클 때도, 매번 d[1] 부터 d[n]을 새로 구하는 것보다 미리 구해두는 것이 효율적이다.
✔️초기값을 어디까지 주고, 어느 범위부터 식을 사용해 계산할 것인지 알아두자.
d = [0] * 20
d[1] = 1
d[2] = 2
d[3] = 4
for i in range(4, 11):
d[i] = d[i-1] + d[i-2] + d[i-3]
t = int(input())
while t:
t -= 1
n = int(input())
print(d[n])
출처:
https://youtu.be/5leTtB3PQu0?si=xxZuJ90OukExoe4C&t=524
'Algorithm' 카테고리의 다른 글
| [Python/코테] 백준 1149 RGB 거리 (0) | 2023.11.27 |
|---|---|
| [Python/코테] 백준 2579 계단 오르기 (0) | 2023.11.27 |
| [Pyhton/코테] 백준 1463 1로 만들기 (0) | 2023.11.26 |
| [Python/코테] 백준 15656 N과 M(7) (0) | 2023.11.21 |
| [Python/코테] 백준 2239 스도쿠 (0) | 2023.11.21 |
Comments