ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ฅ ๋ฌธ์
์๋์ ๊ฐ์ด 5์ ์ฌ์น์ฐ์ฐ๋ง์ผ๋ก 12๋ฅผ ํํํ ์ ์์ต๋๋ค.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5๋ฅผ ์ฌ์ฉํ ํ์๋ ๊ฐ๊ฐ 6,5,4์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ค ๊ฐ์ฅ ์์ ๊ฒฝ์ฐ๋ 4์
๋๋ค.
์ด์ฒ๋ผ ์ซ์ N๊ณผ number๊ฐ ์ฃผ์ด์ง ๋, N๊ณผ ์ฌ์น์ฐ์ฐ๋ง ์ฌ์ฉํด์ ํํํ ์ ์๋ ๋ฐฉ๋ฒ ์ค N ์ฌ์ฉ ํ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
๐ค ํ์ด ๋ฐฉ๋ฒ
์ด ๋ฌธ์ ๋ ๋์ ๊ณํ๋ฒ(Dynamic Programming)์ผ๋ก ๋ถ๋ฅ๋์ด ์์ง๋ง, ๊น์ด ์ฐ์ ํ์(Depth-First Search)์ผ๋ก ํ์๋ค.
๊น์ด ์ฐ์ ํ์์ด๋ ๋ฃจํธ๋
ธ๋์์ ๋ถํฐ ์์ํด์ ๋ค์ ๋ธ๋์น๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ธ๋์น๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ๋ณ์
countN
: N์ด ์ฌ์ฉ๋ ๊ฐ์resultN
: N์ ์ด์ฉํ์ฌ ๊ณ์ฐํ ์์ ๊ฒฐ๊ณผcalN
: n ~ nnnnnnnn์ ์
if countN > 8 { return }
- N์ 1์ด์ 9 ์ดํ์ด๋ค. 8์ ์ด๊ณผํ๋ฉด(0 ~ 8๊น์ง ์ด 9๊ฐ๋ฅผ ์ด๊ณผํ๋ฉด) ๋ฆฌํดํด์ค๋ค. ์ด๋ ๊ฒฐ๊ณผ๋ -1์ด ๋๋ค.
if bumber == resultN
:number
์ ๊ณ์ฐํ ์์ ๊ฒฐ๊ณผresultN
์ด ๊ฐ์ ๊ฒฝ์ฐresult == -1
: ์์ง ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๊ฐ ์์ด ์ฒ์์ผ๋กresult
๋ฅผ ์ ๋ฐ์ดํธ ํด์ค์ผ ํ๋ ๊ฒฝ์ฐcountN < result
: ํ์ฌresult
์ ๊ฐ ๋ณด๋ค ๋ ์ ์ ๊ฐ์์ N์ ์ฌ์ฉํ ๊ฒฝ์ฐ- ์ ๋๊ฐ์ ๊ฒฝ์ฐ์
result
๋ฅผ N์ด ์ฌ์ฉ๋ ๊ฐ์countN
์ผ๋ก ์ ๋ฐ์ดํธ ํด์ฃผ๊ณ ๋ฆฌํดํ๋ค.
calN
์ n ~ nnnnnnnn์ ์๋ฅผ ํ๋์ฉ ๋ฃ์ด์ฃผ๋ฉฐ ํ์ํ๋ค.for i in 0..<8 { calN = calN * 10 + N ... }
dfs(N, number, countN + 1 + i, resultN + calN, &result)
:resultN
์ ๋ํ์ฌcalN
์ +, -, *, / ์ฐ์ฐ์ ์ํํ๋ค.countN + 1 + i
:countN
์ N์ด ์ฌ์ฉ๋ ๊ฐ์๋ฅผ ๋๊ฒจ์ค๋ค.resultN + calN
:resultN
์ ๊ณ์ฐํ ์์ ๊ฒฐ๊ณผ๋ฅผ ๋๊ฒจ์ค๋ค.
๐ฉ๐ป๐ป Swift Code
import Foundation
func solution(_ N:Int, _ number:Int) -> Int {
var result: Int = -1
dfs(N, number, 0, 0, &result)
return result
}
func dfs(_ N:Int, _ number:Int, _ countN:Int, _ resultN:Int, _ result: inout Int) {
var calN = 0
if countN > 8 {
return
}
if number == resultN && (result == -1 || countN < result) {
result = countN
return
}
for i in 0..<8 {
calN = calN * 10 + N
dfs(N, number, countN + 1 + i, resultN + calN, &result)
dfs(N, number, countN + 1 + i, resultN - calN, &result)
dfs(N, number, countN + 1 + i, resultN * calN, &result)
dfs(N, number, countN + 1 + i, resultN / calN, &result)
}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ต๋๊ณต์ฝ์์ ์ต์๊ณต๋ฐฐ์ (์ ํด๋ฆฌ๋ ํธ์ ๋ฒ) (0) | 2021.04.05 |
---|---|
[Algorithm] ์์ ์ฐพ๊ธฐ (์๋ผํ ์คํ ๋ค์ค์ ์ฒด) (0) | 2021.04.05 |
[Algorithm] ๋๋จธ์ง ํ ์ (ternary(?:), XOR(^), map) (0) | 2021.03.19 |
[Algorithm] ์๋ฆฟ์ ๋ํ๊ธฐ (map, reduce) (0) | 2021.03.19 |
[Algorithm] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (append(), removeLast()) (0) | 2021.03.16 |
- Total
- Today
- Yesterday
- Git
- Firebase
- abs()
- programmers
- ternary
- ์ต์๊ณต๋ฐฐ์
- DFS
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
- sql
- compactMap
- ๋ฌ๋ ฅ
- ๊น์ด ์ฐ์ ํ์
- iTunes Search API
- IOS
- UISearchController
- ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ
- Algorithm
- Kakao
- BOJ
- ๋ณ์ก
- SWIFT
- java
- ์ต๋๊ณต์ฝ์
- Baekjoon
- ํ๋ก๊ทธ๋๋จธ์ค
- mysql
- TIL
- map
- ์๋กํ ์คํ ๋ค์ค์ ์ฒด
- calendar
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |