[프로그래머스/Swift] lv1 : 모의고사
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42840
풀이
완전탐색으로 풀었다.
1,2,3번 수포자들이 찍는 패턴을 배열로 저장
answers 배열과 대조하기 위해서 인덱스를
idx % 패턴 개수
로 처리정답 개수를 딕셔너리에 저장
딕셔너리를 순회하며 정답 배열 만들기
import Foundation
func solution(_ answers:[Int]) -> [Int] {
let one = [1,2,3,4,5]
let two = [2,1,2,3,2,4,2,5]
let three = [3,3,1,1,2,2,4,4,5,5]
// 각 수포자들의 정답을 딕셔너리에 저장 [Int : Int]
var counts = [1 : 0, 2 : 0, 3 : 0]
// answers 배열과 대조하여 정답 개수 카운팅
for i in 0 ..< answers.count {
if answers[i] == one[i % one.count] {
counts[1]! += 1
}
if answers[i] == two[i % two.count] {
counts[2]! += 1
}
if answers[i] == three[i % three.count] {
counts[3]! += 1
}
}
// 정렬된 값을 리턴해야함으로 정렬부터 진행
// filter 함수를 활용하여 딕셔너리의 최댓값을 value로 가지는 아이템만 필터링
// map 함수를 활용하여 키만 배열로 저장 후 배열 리턴
return counts.sorted{ $0.key < $1.key }.filter { $0.value == counts.values.max() }.map { $0.key }
}
후기
처음 문제를 풀이할 때 딕셔너리를 사용하지 않았더니 코드가 복잡해졌다. 아직 Swift로 코테 공부를 많이 해보질 않아서 딕셔너리 사용이 익숙하지 않았다. 딕셔너리 다루는 것도 빨리 익숙해져야겠음
dictionary 사용법 간단 정리
// 딕셔너리 선언
// [Int:Int]
var dict = [ 1:0, 2:0, 3:0 ]
// [String:Int]
var dict2 = [ "hello":2, "foo":5, "bar":2 ]
// 딕셔너리 for loop
// 순서가 랜덤임. 저장한 순서로 순회하진 않는다.
for (k,v) in dict {
print(k)
print(v)
}
// 딕셔너리에도 고차함수 활용이 가능하다.
dict.sorted{ $0.key < $1.key }
dict.map { $0.key } // 키만 저장한 배열 리턴