[Algorithm] 프로그래머스 모의고사
Updated:
문제 설명
나의 풀이
import Foundation
let firstPerson = [1,2,3,4,5]
let secondPerson = [2,1,2,3,2,4,2,5]
let thirdPerson = [3,3,1,1,2,2,4,4,5,5]
func solution(_ answers:[Int]) -> [Int] {
var countFirstPerson = 0
var countSecondPerson = 0
var countThirdPerson = 0
for (index, answer) in answers.enumerated() {
if compareFirstPersonAnswer(index: index, answer: answer) {
countFirstPerson += 1
}
if compareSecondPersonAnswer(index: index, answer: answer) {
countSecondPerson += 1
}
if compareThirdPersonAnswer(index: index, answer: answer) {
countThirdPerson += 1
}
}
var answer = [1: countFirstPerson, 2: countSecondPerson, 3: countThirdPerson]
let sortedAnswer = answer.sorted { $0.1 > $1.1 }
if sortedAnswer[0].value > sortedAnswer[1].value {
return [sortedAnswer[0].key]
} else if sortedAnswer[1].value > sortedAnswer[2].value {
if sortedAnswer[0].key < sortedAnswer[1].key {
return [sortedAnswer[0].key, sortedAnswer[1].key]
}
return [sortedAnswer[1].key, sortedAnswer[0].key]
} else {
return [1,2,3]
}
}
func compareFirstPersonAnswer(index: Int, answer: Int) -> Bool {
if answer == firstPerson[index % 5] { return true }
return false
}
func compareSecondPersonAnswer(index: Int, answer: Int) -> Bool {
if answer == secondPerson[index % 8] { return true }
return false
}
func compareThirdPersonAnswer(index: Int, answer: Int) -> Bool {
if answer == thirdPerson[index % 10] { return true }
return false
}
고민한 점
Swift 딕셔너리 정렬은 다음과 같이 사용할 수 있다.
let dic = [1: 10, 2: 50, 3: 20]
// 값을 기준으로 오름 차순 정렬
let valueSortedDic = dic.sorted { $0.value < $1.value } // { $0.1 < $1.1 }
// [(key: 1, value: 10), (key: 3, value: 20), (key: 2, value: 50)]
// 키를 기준으로 내림 차순 정렬
let keySortedDic = dic.sorted { $0.key > $1.key } // { $0.0 > $1.0 }
// [(key: 3, value: 20), (key: 2, value: 50), (key: 1, value: 10)]
괜찮은 남의 풀의
import Foundation
func solution(_ answers:[Int]) -> [Int] {
let answer = (
a: [1, 2, 3, 4, 5], // index % 5
b: [2, 1, 2, 3, 2, 4, 2, 5], // index % 8
c: [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] // index % 10
)
var point = [1:0, 2:0, 3:0]
for (i, v) in answers.enumerated() {
if v == answer.a[i % 5] { point[1] = point[1]! + 1 }
if v == answer.b[i % 8] { point[2] = point[2]! + 1 }
if v == answer.c[i % 10] { point[3] = point[3]! + 1 }
}
// ⭐️
return point.sorted{ $0.key < $1.key }.filter{ $0.value == point.values.max() }.map{ $0.key }
}
다른 곳이야 다 비슷한데 ⭐️ 비교해서 출력하는 부분을 정리하면 다음과 같다.
- 키 값을 오름차순으로 정렬 (sorted)
- 3명의 점수를 채점한 것에서 max 값이랑 같은 값들을 걸러냄 (filter)
- 걸러낸 것들의 키 값을 담음 (map)
Leave a comment