๋ฌธ์ ์ค๋ช
์ ์ X์ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง ์ด๋ค.
- X๊ฐ 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 3์ผ๋ก ๋๋๋ค.
- X๊ฐ 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉด, 2๋ก ๋๋๋ค.
- 1์ ๋บ๋ค.
์ ์ N์ด ์ฃผ์ด์ก์ ๋, ์์ ๊ฐ์ ์ฐ์ฐ ์ธ ๊ฐ๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ 1์ ๋ง๋ค๋ ค๊ณ ํ๋ค. ์ฐ์ฐ์ ์ฌ์ฉํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 106๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์ N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ํ๋ ํ์์ ์ต์๊ฐ์ ์ถ๋ ฅํ๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
10
์ถ๋ ฅ
3
๋ด ๋ฌธ์ ํ์ด
var num = Int(readLine()!)!
var count = 0
var min = num // ์ต์๊ฐ(๊ฒฐ๊ด๊ฐ) ๋ด์ ๋ณ์. ์๋ฌด๋ฆฌ ์ซ์๊ฐ ์ปค๋ ์ฃผ์ด์ง ์ซ์๋ณด๋ค ํด ์๋ ์์ผ๋ฏ๋ก num ๋ฃ๊ณ ์์
func solution(_ n: Int, _ count: Int) {
if count > min { return } // ์นด์ดํธ๊ฐ min๋ณด๋ค ์ปค์ง๋ฉด ์ด์ฐจํผ ์ต์๊ฐ ์๋๋ฏ๋ก ๊ณ์ํ ํ์x
if n == 1 { min = count } // 1์ผ ๊ฒฝ์ฐ min ์
๋ฐ์ดํธ!
if n % 3 == 0 { solution(n/3, count+1) }
if n % 2 == 0 { solution(n/2, count+1) }
solution(n-1, count+1)
}
solution(num, count)
print(min)
๐ DP ๋ฌธ์ ๋ก, ์ฌ๊ท ํธ์ถํ๋ฉด์ 1์ด ๋ ๋๋ง๋ค ์ต์๊ฐ์ ํ์ธํด์ฃผ๋๊ฒ ํฌ์ธํธ!
- n์ด 3์ผ๋ก ๋๋ ๋จ์ด์ง๋ ๊ฒฝ์ฐ, 2๋ก ๋๋ ๋จ์ด์ง๋ ๊ฒฝ์ฐ๋ฅผ ์กฐ๊ฑด์ผ๋ก
๊ฐ ์ฐ์ฐ์ ์คํํ๋ ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํด์ฃผ์๊ณ , ํธ์ถ๋ง๋ค ์นด์ดํธํ๋ค.
๊ทธ๋ฆฌ๊ณ -1 ์ฐ์ฐ์ ์ธ์ ๋ ์ง ๊ฐ๋ฅํ๋ฏ๋ก ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ์ง ์๊ณ ํธ์ถํ๋ค. - ํจ์ ์คํ๋ง๋ค min ๊ฐ๊ณผ count ๊ฐ์ ๋น๊ตํ๊ณ ,
count ๊ฐ์ด min๋ณด๋ค ํด ๊ฒฝ์ฐ ์ด์ฐจํผ ํด๋น ์ฐ์ฐ๊ฐ์ ์ต์๊ฐ ์๋๋ฏ๋ก return ํ๋ค.
๋ฐ๋ ๊ฒฝ์ฐ์๋ ์ฐ์ฐ ๊ฒฐ๊ด๊ฐ์ด 1์ด ๋์๋ค๋ฉด min์ count๋ฅผ ์ ์ฅํด์ค๋ค.
๐ก ํผ๋๋ฐฑ
- DP ๊ณต๋ถ๋ฅผ ์์ํ๋ฉด์ ์ฒ์ ํผ ๋ฌธ์ ์์ง๋ง, ์์ฒด๋ก ์ด๋ ต์ง ์์์ผ๋ฏ๋ก ์ฝ๊ฒ ํ์๋ค.
- ์์ง DP ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด์ ์ ํํ ํฌ์ธํธ๋ ํจํด์ ํ์ ํ์ง ๋ชปํ์ผ๋ฏ๋ก ๋ง์ด ํ์ด๋ด์ผ๊ฒ ๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๊ณ๋จ ์ค๋ฅด๊ธฐ BOJ #2579 (0) | 2021.10.19 |
---|---|
[Swift Algorithm] 1, 2, 3 ๋ํ๊ธฐ BOJ #9095 (0) | 2021.10.19 |
[Swift Algorithm] ์์ ์์ญ BOJ #2468 (2) | 2021.10.12 |
[Swift Algorithm] ๋์ดํธ์ ์ด๋ BOJ #7562 (0) | 2021.10.11 |
[Swift Algorithm] ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ BOJ #2667 (0) | 2021.10.10 |
๋๊ธ