๋ฌธ์ ์ค๋ช
์ ์ 4๋ฅผ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์ด 7๊ฐ์ง๊ฐ ์๋ค. ํฉ์ ๋ํ๋ผ ๋๋ ์๋ฅผ 1๊ฐ ์ด์ ์ฌ์ฉํด์ผ ํ๋ค.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
์ ์ n์ด ์ฃผ์ด์ก์ ๋, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ ์ n์ด ์ฃผ์ด์ง๋ค. n์ ์์์ด๋ฉฐ 11๋ณด๋ค ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
3
4
7
10
์ถ๋ ฅ
7
44
274
๋ด ๋ฌธ์ ํ์ด
let cases = Int(readLine()!)!
func solution(_ n: Int) -> Int {
if n == 1 { return 1 }
if n == 2 { return 2 }
if n == 3 { return 4 }
else { return solution(n-3) + solution(n-2) + solution(n-1) }
}
for _ in 0..<cases { print(solution(Int(readLine()!)!)) }
๐ DP ๋ฌธ์ ๋ก, ์ ํ์์ ํ์ฉํ์ฌ ์ฌ๊ทํจ์๋ก ํ์ดํ๋๊ฒ์ด ํฌ์ธํธ!
[์ ํ์]
- 1์ 1 = 1๊ฐ
- 2๋ 1+1 = 1๊ฐ
- 3์ 1+1+1, 1+2, 2+1 = 3๊ฐ
- 4๋ 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1, 4 = 7๊ฐ
- 5๋ 1+1+1+1, (1+1+1+2 X 4), (1+2+2 X 3), (1+1+3 X 3), (2+3 X 2), 5 = 13๊ฐ
=> ์ด๋ ๊ฒ ๋ด๊ฐ ๊ตฌํ๊ณ ์ ํ๋ ์์ ์กฐํฉ ๊ฐ์๋ ์ด์ 3๊ฐ ์๋ค์ ์กฐํฉ ๊ฐ์ ํฉ๊ณผ ๊ฐ์
=> solution(n) = solution(n-3) + solution(n-2) + solution(n-1) ์ผ๋ก ์ ํ์ ๊ตฌํ ๊ฐ๋ฅ!
[๋ฌธ์ ํ์ด]
- n์ด 1, 2, 3์ผ ๊ฒฝ์ฐ๋ ์ด์ ์ธ ๊ฐ ์ ์กฐํฉ ๊ฐ์๋ฅผ ๊ตฌํด์ค ์ ์์ผ๋ฏ๋ก ์์ธ๋ก ์ฒ๋ฆฌํ๋ค.
- ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์์์ ๊ตฌํ ์ ํ์์ ์ฌ๊ท ํธ์ถ๋ก ๊ตฌํํ๋ค.
๐ก ํผ๋๋ฐฑ
- DP๋ ๋ฉ๋ชจ์ด์ ์ด์
๊ณผ ์ ํ์์ ์ฌ์ฉํด์ ๋ฌธ์ ๋ฅผ ํ์ดํ๋ ๊ฒ ๊ฐ๋ค.
์ฌ๊ธฐ์๋ ์ ํ์์ ๊ตฌํด์ฃผ๋๊ฒ ๊ด๊ฑด์ด์๋๋ฐ, ๋คํํ ์ด๋ ค์ด ํจํด์ ์๋์๋ค.
ํ์ง๋ง ์์ผ๋ก ๋ ์ด๋ ค์ด,,! ์ ํ์๋ค์ ์๊ฐํด๋ผ ์ ์์์ง ๊ฑฑ์ ์ด ๋๊ธด ํ๋ค.
์ ํ์๋ค๋ ํน์ ํ ํจํด์ด๋ ์ ํ์ด ์๋์ง ๋ง์ด ํ์ด๋ด์ผ ์ ์ ์์ ๊ฒ ๊ฐ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] RGB๊ฑฐ๋ฆฌ BOJ #1149 (0) | 2021.10.20 |
---|---|
[Swift Algorithm] ๊ณ๋จ ์ค๋ฅด๊ธฐ BOJ #2579 (0) | 2021.10.19 |
[Swift Algorithm] 1๋ก ๋ง๋ค๊ธฐBOJ #1463 (0) | 2021.10.19 |
[Swift Algorithm] ์์ ์์ญ BOJ #2468 (2) | 2021.10.12 |
[Swift Algorithm] ๋์ดํธ์ ์ด๋ BOJ #7562 (0) | 2021.10.11 |
๋๊ธ