Algorithm

[Algorithm] λͺ¨μ˜κ³ μ‚¬ (완전탐색)

_보름 2021. 6. 20. 19:46

πŸ–₯ 문제

μˆ˜ν¬μžλŠ” μˆ˜ν•™μ„ ν¬κΈ°ν•œ μ‚¬λžŒμ˜ μ€€λ§μž…λ‹ˆλ‹€. 수포자 삼인방은 λͺ¨μ˜κ³ μ‚¬μ— μˆ˜ν•™ 문제λ₯Ό μ „λΆ€ 찍으렀 ν•©λ‹ˆλ‹€. μˆ˜ν¬μžλŠ” 1번 λ¬Έμ œλΆ€ν„° λ§ˆμ§€λ§‰ λ¬Έμ œκΉŒμ§€ λ‹€μŒκ³Ό 같이 μ°μŠ΅λ‹ˆλ‹€.
1번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 μˆ˜ν¬μžκ°€ μ°λŠ” 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...
1번 λ¬Έμ œλΆ€ν„° λ§ˆμ§€λ§‰ λ¬Έμ œκΉŒμ§€μ˜ 정닡이 μˆœμ„œλŒ€λ‘œ 듀은 λ°°μ—΄ answersκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ°€μž₯ λ§Žμ€ 문제λ₯Ό 맞힌 μ‚¬λžŒμ΄ λˆ„κ΅¬μΈμ§€ 배열에 λ‹΄μ•„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

πŸ€” 풀이 방법

각 μˆ˜ν¬μžκ°€ μ°λŠ” 방식을 담은 3개의 λ°°μ—΄κ³Ό 3λͺ…μ˜ 점수λ₯Ό 담을 score 배열을 ν•˜λ‚˜ λ§Œλ“€μ–΄μ€€λ‹€.
λ°°μ—΄μ˜ 0λ²ˆμ§ΈλŠ” 1번 수포자의 점수, 1λ²ˆμ§ΈλŠ” 2번 수포자의 점수, 2λ²ˆμ§ΈλŠ” 3번 수포자의 배열을 μ €μž₯ν•  것이닀.

for문을 돌며 answers와 3λͺ…μ˜ 닡을 각각 λΉ„κ΅ν•˜μ—¬ 같을 경우 score에 1을 더해쀀닀.
μ΄λ•Œ % μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, ... 와 같은 μˆœμ„œλ‘œ λΉ„κ΅ν•œλ‹€.
닡을 λ‹€ λΉ„κ΅ν•œ 후에 κ°€μž₯ λ§Žμ€ 문제λ₯Ό 맞힌 개수λ₯Ό max에 μ €μž₯ν•œλ‹€.
κ·Έ ν›„ λ‹€μ‹œ for문을 돌며 max개의 닡을 맞힌 수포자의 번호λ₯Ό μ €μž₯ν•˜μ—¬ 이λ₯Ό λ¦¬ν„΄ν•˜μ˜€λ‹€.

λ”•μ…”λ„ˆλ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ ν’€λ©΄ 더 μ§κ΄€μ μ΄κ²Œ μ½”λ“œλ₯Ό μ§€ 수 μžˆμ„ 것 κ°™λ‹€.

πŸ‘©πŸ»‍πŸ’» Swift Code

import Foundation

func solution(_ answers:[Int]) -> [Int] {
    var person1 = [1, 2, 3, 4, 5]
    var person2 = [2, 1, 2, 3, 2, 4, 2, 5]
    var person3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    var score = [0, 0, 0]
    var answer: [Int] = []

    for i in 0..<answers.count {
        if answers[i] == person1[i % 5] {
            score[0] += 1
        }
        if answers[i] == person2[i % 8] {
            score[1] += 1
        }
        if answers[i] == person3[i % 10] {
            score[2] += 1
        }
    }

    let max = score.max()!

    for i in 0..<score.count {
        if score[i] == max {
            answer.append(i + 1)
        }
    }

    return answer
}

 

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - λͺ¨μ˜κ³ μ‚¬

μˆ˜ν¬μžλŠ” μˆ˜ν•™μ„ ν¬κΈ°ν•œ μ‚¬λžŒμ˜ μ€€λ§μž…λ‹ˆλ‹€. 수포자 삼인방은 λͺ¨μ˜κ³ μ‚¬μ— μˆ˜ν•™ 문제λ₯Ό μ „λΆ€ 찍으렀 ν•©λ‹ˆλ‹€. μˆ˜ν¬μžλŠ” 1번 λ¬Έμ œλΆ€ν„° λ§ˆμ§€λ§‰ λ¬Έμ œκΉŒμ§€ λ‹€μŒκ³Ό 같이 μ°μŠ΅λ‹ˆλ‹€. 1번 μˆ˜ν¬μžκ°€ μ°λŠ”

programmers.co.kr