-
Notifications
You must be signed in to change notification settings - Fork 0
5-giljihun #26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
5-giljihun #26
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
κ·Έλ¬λ€μ μμν μ§μ μ λν΄μλ§ SetμΌλ‘ν΄μ£Όλ©΄ λλκ΅°μ ..!
μ λ κ΄ν μ΅μ§λ‘ StringμΌλ‘ μ μ₯νλ €κ³ μ λ₯Ό μΌμ΅λλ€..!
func arrToString(_ arr: [Int]) -> String {
return arr.map(String.init).joined(separator: "")
}
///
visited.insert(arrToString(arr))
```There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
μ λ μλ‘μ΄λ°°μ΄μ λ§λ€κ³ i~kκΉμ§ λ€μ§κ³ λλ¨Έμ§λ λΆμ¬μ€¬λλ°, κ·Έλ₯ μμλ§κ±΄λλ €μ£Όλ©΄ λμλ€μ ..! λ§μ΄ λ°°μλλ€ π
// startλΆν° k λ²μ§ΈκΉμ§ λ€μ§μ΄μ£Όλ ν¨μ
func reverseArr(_ arr: [Int], _ start: Int) -> [Int] {
let end = start + K - 1
return arr[0..<start] + arr[start ... end].reversed() + arr[end + 1..<arr.count]
}
```
bishoe01
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
κ²½λ‘νμ μΌκ±°λΌκ³ μκ°λ λͺ»νλ€μ π
λμ ν κ°μ΄ μμμ μκ³ λ¦¬μ¦ λΆλ₯λ³΄κ³ λμμΌ νκΈ° μμνμ΅λλ€.
ν¨μ μ€λͺ
arrToStringSetμ νμ¬λ°°μ΄ μ μ₯νκΈ° μν΄ λ°°μ΄μ StringμΌλ‘ λ°κΏμ£Όλ ν¨μ- μ΄κ²λ κ·Έλ₯ μμ
startλ₯Ό Setμ μ μ₯ν΄μ€¬μΌλ©΄ λ μ½λκ° κΉλν΄μ‘μ κ² κ°μμ
- μ΄κ²λ κ·Έλ₯ μμ
reverseArrλ°°μ΄μ μΌλΆλΆμ λ€μ§μ΄ μ£Όλ ν¨μ- κ·Όλ° κΈΈμ μλ μ½λ보λκΉ κ·Έλ₯
arr[start ... end].reverse()μ΄λ κ²λ§ ν΄λ λλλΌκ΅¬μ..!
- κ·Όλ° κΈΈμ μλ μ½λ보λκΉ κ·Έλ₯
μλμ½λ
- Bfsλ₯Ό μν queueμμ±
- λ°©λ¬Έλ°°μ΄ μμ± (Set)
- queueλ₯Ό λλ©΄μ N-KκΉμ§ 0λΆν° μ΄λλΆλΆμμ λ°°μ΄μ λ€μ§μ μ μλμ§ μ λΆ νμ
- μΉ΄μ΄ν
μ κ°μ΄ μμ΄μ νμνλ€κ°
answerArrμ λ°°μ΄μ΄ κ°μμ§λ©΄ return
func solution(N: Int, K: Int, arr: [Int]) -> Int {
var answerArr = arr
// μμ±νμλμ κΈ°μ€
answerArr.sort()
// arrToString -> Set μ μ₯νλ €κ³ λ°°μ΄μ λ¬Έμμ΄λ‘ λ°κΏμ€¬μ
let targetString = arrToString(answerArr)
// startλΆν° k λ²μ§ΈκΉμ§ λ€μ§μ΄μ£Όλ ν¨μ
func reverseArr(_ arr: [Int], _ start: Int) -> [Int] {
let end = start + K - 1
return arr[0..<start] + arr[start ... end].reversed() + arr[end + 1..<arr.count]
}
func arrToString(_ arr: [Int]) -> String {
return arr.map(String.init).joined(separator: "")
}
// μ΄λ―Έ μ λ ¬λμ΄ μλ€λ©΄ 0 λ°ν
if arrToString(arr) == targetString {
return 0
}
var queue = [(currArray: [Int], count: Int)]()
var pointer = 0
var visited = Set<String>()
queue.append((arr, 0))
visited.insert(arrToString(arr))
while pointer < queue.count {
let targetArr = queue[pointer].currArray
let cnt = queue[pointer].count
let maxEnd = N - K
for i in 0 ... maxEnd {
let tmpArr = reverseArr(targetArr, i)
let tmpArrString = arrToString(tmpArr)
// λͺ©ν μνμ λλ¬νλ€λ©΄ λ°λ‘ λ°ν
if tmpArrString == targetString {
return cnt + 1
}
// λ°©λ¬Έλ°°μ΄νλ¨
if !visited.contains(tmpArrString) {
queue.append((tmpArr, cnt + 1))
visited.insert(tmpArrString)
}
}
pointer += 1
}
return -1
}
π λ¬Έμ λ§ν¬
μνΈ κ²μ
βοΈ μμλ μκ°
1h
β¨ μλ μ½λ
λ¬Έμ λ₯Ό λ³΄κ³ , λ°λ‘ dfs νΉμ bfsλ‘ νμ΄μΌκ² λ€κ³ μκ°μ΄ λμ§ μμμ΅λλ€.
κ·Έλ°λ°, μ λ ₯μ λν΄ λ³νλ₯Ό μ§μ νλνλ λμ΄ν΄λ³΄λ
κ° μμ΄μ μνκ° 1λ²μ turnμ κ°κ³ λ°λλ€λ μ μμ
κ° μνκ° κ°μ μΌλ‘ μ°κ²°λ λ Έλμ κ°λκ΅°μ. (κ·Έλνμ λ Έλμ²λΌ μλ‘ μ°κ²°λλ ꡬ쑰!)
BFS μ ν κ·Όκ±°
νμ¬ μν -> λ€μ μνλ₯Ό μ°Ύμκ°λ μν κΈ°λ° λ¬Έμ μ ꡬ쑰 μ,
κ°κΉμ΄ μνλ¨Όμ λ€ μ²΄ν¬νλ BFSκ° μμ°μ€λ½λ€κ³ νλ¨νμ΅λλ€.
νΉν, μ΅λ¨ κ²½λ‘ λ₯Ό μ°Ύλ λ¬Έμ μμ κ°λ₯ν μνμ μ (μ¬κΈ°μ 8! = 40320 μ΄μ£΅)λ₯Ό λ΄μΌν©λλ€.
μ΅λ¨κ²½λ‘λ bfsλ‘ λ¬΄μ‘°κ±΄ μ°ΎκΈ°μ, μ±λ₯μ΄μλ§ νμΈνλ©΄ λλκΉμ!
π μλ‘κ² μκ²λ λ΄μ©
1. DFS, BFS μ ν κΈ°μ€μ λ¬Έμ ꡬ쑰λ‘λΆν° νμ νκΈ°
κ°λ μ΅λ¨ κ²½λ‘, 거리λ₯Ό νμ μμ΄μ λκ°μ§ λͺ¨λ μ¬μ©λλ κ²½μ°λ μκ³
κ²°κ΅ μ νμ νκ² λλλ°μ.
λ¬Όλ‘ λλ€ μ¬μ©ν΄λ³΄κ±°λ ν μ€ μλ©΄ νμ€νκ² μ§λ§,
κ²°κ΅ κ·Έλ₯ μΈμ°λκ² μλλΌ λ¬Έμ μ ꡬ쑰λ‘λΆν° μμ°μ€λ½κ² λμΆλμ΄μΌ νλ€λ κ±Έ λκΌμ΅λλ€.
DFSλ μΈμ μ 리νκ°?
λͺ¨λ μ‘°ν©/μμ΄μ λ€ λ°μ ΈμΌ νλ λ¬Έμ
ex: λ°±νΈλνΉ, λΆλΆμ§ν© ꡬνκΈ°, νμ κΉμ΄μ λ°λΌ κ°μ§μΉκΈ°ν λ
νΉμ 쑰건μ λ§μ‘±νλ λͺ¨λ ν΄λ₯Ό μ°ΎμμΌ ν λ
ex: νΉμ κ²½λ‘λ€ μΆλ ₯, νΉμ 쑰건μ λ§μ‘±νλ μ‘°ν© κ°μ μΈκΈ° λ±
λͺ©νκ° μ΅μ κ²½λ‘ κ° μλλΌ λͺ¨λ κ²½μ° νμ μΌ λ μ 리νκ² λ€μ.
BFSλ μΈμ μ 리νκ°?
μ΅λ¨ 거리, μ΅μ μ°μ°, μ΅μ μκ° λ±
ex: λ―Έλ‘ μ΅λ¨ κ²½λ‘, νΌμ¦ λ¬Έμ , μ«μ λ§λ€κΈ°, λ¨μ΄ λ³ν λ±
μν μ μ΄κ° κ°λ₯ν ꡬ쑰μμ κ°μ₯ λ¨Όμ λλ¬ν κ²μ΄ μ λ΅μΈ λ¬Έμ
거리 λ¨μλ‘ μνλ₯Ό νμ₯νλ©° νμν΄μΌν λ μ 리νκ² λ€μ.
λ¨Όμ λλ¬ν ν΄ = μ λ΅ (무쑰건 μ΅λ¨ κ²½λ‘)
μ λ΄μ© κΈ°μ€μΌλ‘ λ€μ λ¬Έμ λ₯Ό 보면,
μ΄ λ¬Έμ λ λͺ¨λ κ²½μ°λ₯Ό λ³Ό νμ μμ£ ? (그건 μ΅μ μ μν©)
μ²μμΌλ‘ μ€λ¦μ°¨μ μνμ λλ¬ν μκ°μ΄ λ°λ‘ μ λ΅μ΄λκΉμ!
κ·Έλ¬λ, BFSκ° μ ν©!
μκ°μ νμ νμ₯νλ κ², μκ³ λ¦¬μ¦ κ³΅λΆκ°λ€κ³ λλΌλ λ¬Έμ νκ³ μμ΅λλ€!