ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€-Swift

완전탐색 - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€(Swift)

CheonD 2022. 9. 29. 13:09

완전탐색 - ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€(Swift)

 

 

 λ¬Έμ œ μ„€λͺ…

 

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

 

 λ‚˜μ˜ 풀이

 

cnt 배열을 νŠœν”Œλ‘œ κ΅¬μ„±ν•΄μ„œ μΈλ±μŠ€μ— μ ‘κ·Όν•΄ μ¦κ°€μ‹œν‚€λŠ” 방법을 μ‚¬μš©ν–ˆλ‹€. 

if문을 많이 μ‚¬μš©ν•˜κ³  μ’€ λ³΅μž‘ν•˜κ²Œ μΈλ±μŠ€μ— μ ‘κ·Όν•œ 것 κ°™μ•„μ„œ ν’€κ³  λ‚˜μ„œλ„ ꡉμž₯히 μ°μ°ν–ˆλ‹€..

 

import Foundation

func solution(_ answers:[Int]) -> [Int] {
    let arrs = [
        (1, [1, 2, 3, 4, 5]),
        (2, [2, 1, 2, 3, 2, 4, 2, 5]),
        (3, [3, 3, 1, 1, 2, 2, 4, 4, 5, 5])
    ]
    
    var idx = 0
    var cnts = [(Int, Int)](repeating: (0, 0), count: 4)
    
    for i in 1..<4 {
        cnts[i].0 = i
    }
    for arr in arrs {
        answers.forEach { (num) in
            if num == arr.1[idx] {
                cnts[arr.0].1 += 1
            }
            idx += 1
            if idx == arr.1.count {
                idx = 0
            }
        }
        idx = 0
    }
    cnts.remove(at: 0)
    var max = 0
    cnts.forEach { (cnt) in
        if cnt.1 > max {
            max = cnt.1    
        }   
    }
    
    var fillArr = cnts.filter{ $0.1 == max }
    
    if fillArr.count == 1{
        return [fillArr[0].0]
    } else {
        return fillArr.sorted(by: {$0.0 < $1.0}).map{$0.0}
    }
}

 

 

 λ‹€λ₯Έ μ‚¬λžŒμ˜ 풀이

 

λ”•μ…”λ„ˆλ¦¬λ₯Ό μ΄μš©ν•œ κΉ”λ”ν•œ 풀이이닀.

λ°°μ—΄μ•ˆμ— νŠœν”Œμ„ λ„£μ—ˆλ˜ λ‚˜μ™€ 달리 μ΄λ¦„μžˆλŠ” νŠœν”Œμ— 배열을 λ„£λŠ” ꡬ쑰이닀.

그리고 λ°°μ—΄μ˜ 개수만큼 for문을 λ„λŠ” 것이 μ•„λ‹Œ 문제λ₯Ό νƒμƒ‰ν• λ•Œλ§ˆλ‹€ 각각에 if문을 μ£Όμ–΄ ν•œ λ²ˆμ— μ²˜λ¦¬ν•˜λŠ” 게 μ‹ κΈ°ν–ˆλ‹€.

cnt배열을 μ‚¬μš©ν•  λ•Œ λ”•μ…”λ„ˆλ¦¬λ₯Ό μ΄μš©ν•˜λ©΄ ꡉμž₯히 μœ μš©ν•  것 κ°™λ‹€κ³  λŠκΌˆλ‹€.

 

import Foundation

func solution(_ answers:[Int]) -> [Int] {
    let answer = (
        a: [1, 2, 3, 4, 5],
        b: [2, 1, 2, 3, 2, 4, 2, 5],
        c: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    )
    
    var points = [1:0, 2:0, 3:0]
    
    for (idx, val) in answers.enumerated() {
        if val == answer.a[idx % 5] { points[1]! += 1}
        if val == answer.b[idx % 8] { points[2]! += 1}
        if val == answer.c[idx % 10] { points[3]! += 1}
    }
    
    return points.sorted(by: {$0.key < $1.key}).filter{ points.values.max() == $0.value }.map{$0.key}
}

 

 

 ν”Όλ“œλ°±

 

1. λ­”κ°€ λ¬Έμ œκ°€ λ³΅μž‘ν•˜λ‹€κ³  λŠλ‚„ λ•ŒλŠ” μƒˆλ‘œμš΄ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•˜λ €κ³  λ…Έλ ₯ν•΄λ³΄μž.

2. μΈλ±μŠ€κ°€ 초과되고 μ›μ μœΌλ‘œ λŒμ•„μ˜¬ λ•ŒλŠ” λ‚˜λ¨Έμ§€ μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ ν‘ΈλŠ” κ²½μš°κ°€ λ§Žλ‹€. 

3. λ”•μ…”λ„ˆλ¦¬.values.max()λ₯Ό ν•˜κ²Œ 되면 value에 ν•΄λ‹Ήν•˜λŠ” max값이 μΆ”μΆœλœλ‹€. 

4. λ”•μ…”λ„ˆλ¦¬μ—μ„œ κ°’[key]둜 μ ‘κ·Όν•˜λ©΄ μ˜΅μ…”λ„μ΄ λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— μ–Έλž˜ν•‘ν•œ μƒνƒœλ‘œ κ΅¬ν˜„ν•΄μ•Όν•œλ‹€.