2019 KAKAO BLIND RECRUITMENT νλ³΄ν€ Swift
Source Code
Solution
1. 컬λΌμ ν¬κΈ°μμ 1κ°λΆν° 컬λΌμ κ°―μλ§νΌ μμ μκ΄μμ΄ λ½μ λμ μ‘°ν©μ λͺ¨λ ꡬν΄μ€λ€.
ex) 컬λΌμ΄ 4κ°μΌ λ 1κ°λ₯Ό λ½λ μ‘°ν© = [0],[1],[2],[3]
컬λΌμ΄ 4κ°μΌ λ 2κ°λ₯Ό λ½λ μ‘°ν© = [0,1],[0,2],[0,3],[1,2],[1,3],[2,3]
컬λΌμ΄ 4κ°μΌ λ 3κ°λ₯Ό λ½λ μ‘°ν© = [0,1,2],[0,1,3],[0,2,3],[1,2,3]
컬λΌμ΄ 4κ°μΌ λ 3κ°λ₯Ό λ½λ μ‘°ν© = [0,1,2,3]
2.μ‘°ν©μ ν보ν€κ° ν¬ν¨λλμ§ νμΈ (μ΅μμ± κ²μ¦)
ν보ν€κ° [0],[1,2]κ°
νμ¬ μ‘°ν©μ΄ [0,1] μ΄λΌλ©΄ μ‘°ν© μμ νλ³΄ν€ μ€ [0]μ΄ ν¬ν¨λλ―λ‘ μ΅μμ±μ λΆν©νμ§ μλλ€.
νμ¬ μ‘°ν©μ΄ [3] μ΄λΌλ©΄ μ‘°ν© μμ νλ³΄ν€ μ€ μ΄λ€ κ²λ ν¬ν¨λμ§ μμΌλ―λ‘ μ΅μμ±μ λΆν©νλ€.
3.. μ‘°ν©λ€μ μΈλ±μ€λ‘ Relationμμ κ° νμ μμ±λ€μ λͺ¨μ λ°°μ΄λ‘ λ§λ€κ³ κ·Έ λ°°μ΄λ€ μ€ μ€λ³΅μ΄ μλμ§ νμΈ (μ μΌμ± κ²μ¦)
ex) Relationμ΄ [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] μ΄κ³
μ‘°ν©μ΄ [0,1,2]μΌ κ²½μ°μ κ° relationμ νμμ μΈλ±μ€κ° 0,1,2μΈ κ²λ€μ λͺ¨λ λͺ¨μμ€λ€.
-> ["100","ryan","music"],["200","apeach","math"],["300","tube","computer"],["400","con","computer"],["500","muzi","music"],["600","apeach","music"]
λ§μ½ μ€λ³΅μ΄ μλ€λ©΄ Relationμ νμ κ°―μμ κ°μ κ²μ΄λ€. κ·Έλ λ€λ©΄ ν보ν€μ λ£μ΄μ€
Problem
μ½λ©ν μ€νΈ μ°μ΅ - ν보ν€
[["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2
programmers.co.kr
Reference
Combination μ‘°ν©
- nκ°μ μμμμ r κ°μ μμλ₯Ό μμμ μκ΄μμ΄ λ½λ κ²½μ°μ μ - nCr = n! / (n-r)! * r! - nCr = n-1Cr-1 + n-1Cr μ‘°ν©? μ‘°ν©μ n κ°μ μμ μ€μμ μμλ₯Ό κ³ λ €νμ§ μκ³ μνλ κ°μλ§νΌ λ½λ κ²½μ°μ μλ₯Ό
woongsios.tistory.com
μ‘°ν©μ ꡬν λ μΌμ°λ λΈλ‘κ·Έλ₯Ό μ°Έμ‘°νμ΅λλ€.
μλ‘κ² μκ² λκ²
Aλ°°μ΄μμ Bλ°°μ΄μ΄ λͺ¨λ ν¬ν¨λλμ§ μλ λ°©λ²
Aλ°°μ΄μ Setλ‘ λ§λ€μ΄μ€λ€ isSuperSet(of:) λ©μλλ₯Ό μ¬μ©νμ¬ Bκ° ν¬ν¨λλμ§ νμΈνλ€.
μμμμ΄ λ½λ μ‘°ν©μ ꡬνλ λ²
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//nκ°μ€ mλ₯Ό μμμ μκ΄μμ΄ λ½μμΌν μ‘°ν©λ€μ λ§λ€μ΄μ£Όλ ν¨μ
func combination(n: [Int], m: Int, current index: Int, pickedArray: [Int]) {
if m == 0 {
cases.append(pickedArray)
}else if index == n.count {
return
}else {
var newSelected = pickedArray
newSelected.append(n[index])
combination(n: n, m: m-1, current: index+1, pickedArray: newSelected)
combination(n: n, m: m, current: index+1, pickedArray: pickedArray)
}
}
|
2λ¨κ³λ₯Ό λͺ¨λ νΌμ€ μμλλ ν보ν€κ° λ¨μμμλ€....γ γ γ μ§μ§ λ€ νμλ€!!