프로그래머스 완전 탐색에 있는 모의고사 문제입니다.
해당 문제의 키포인트 입니다.
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
'Algorithm' 카테고리의 다른 글
Algorithm(Swift) - 부족한 금액 계산하기 (0) | 2021.09.12 |
---|---|
Algorithm(Swift) - H-Index (0) | 2021.08.28 |
Algorithm(Swift) - 가장 큰 수 (0) | 2021.08.27 |
Algorithm(Swift) - K번째수 (0) | 2021.07.18 |
Algorithm(Swift) - 두 개 뽑아서 더하기 (0) | 2021.07.18 |