πŸ“– Problem Solution/Programmers

2019 KAKAO BLIND RECRUITMENT 후보킀 Swift

Fomagran πŸ’» 2020. 12. 4. 00:23
728x90
λ°˜μ‘ν˜•

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단계λ₯Ό λͺ¨λ‘ 푼쀄 μ•Œμ•˜λ”λ‹ˆ 후보킀가 λ‚¨μ•„μžˆμ—ˆλ„€....γ…Žγ…Žγ…Ž μ§„μ§œ λ‹€ ν’€μ—ˆλ‹€!!

728x90
λ°˜μ‘ν˜•