본문 바로가기

Algorithm

Algorithm(Swift) - 모의고사

프로그래머스 완전 탐색에 있는 모의고사 문제입니다.

 

해당 문제의 키포인트 입니다.

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, ...

결국 수포자의 방식은 각각의 반복 형식으로 이루어져 있습니다.

입력값의 필터를 걸어 해당값과 수포자의 정답값을 비교합니다.

시험은 최대 10,000 문제까지 제공되지만 배열을 그만큼 초기화 할수는 없기에 나머지값을 줘서

계속 반복적이게 형식에 맞춰 비교를 할수 있게 합니다.

 

1,2,3 등수를 매기기위해 딕셔너리에 값을 저장하고 최대값을 비교하여 해당 키값을 오름차순으로 변경후 리턴합니다.

 

import Foundation

func solution(_ answers:[Int]) -> [Int] {

    let first = [1, 2, 3, 4, 5]
    let second = [2, 1, 2, 3, 2, 4, 2, 5]
    let third = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    var rankDic = [Int:Int]()
    
    
    // 첫번째 구별
    let firstCount = answers.enumerated().filter ({
        index, aa in
        return aa == first[index % 5]
    }).count

    // 두번째 구별
    let secondCount = answers.enumerated().filter ({
        index, aa in
        return aa == second[index % 8]
    }).count

    // 세번째 구별
    let thirdCount = answers.enumerated().filter ({
        index, aa in
        return aa == third[index % 10]
    }).count

    rankDic.updateValue(firstCount, forKey: 1)
    rankDic.updateValue(secondCount, forKey: 2)
    rankDic.updateValue(thirdCount, forKey: 3)

    let max = rankDic.values.max()!
    let result = rankDic.filter { $0.value == max }.keys.sorted()

    return result
}

 

 

 

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

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr