안녕하세요 !
https://programmers.co.kr/learn/courses/30/lessons/77484
풀이
filter 메소드로 0이 몇번 있는지
zeroCnt
를 구했습니다.
그 다음 lottos와 win_nums의합집합
을 구해서 중복되는 숫자가 몇개인지 same을 구해준다음
same과 zeroCnt를 이용해 최고순위와 최저순위를 구했습니다.주의할점은 0이 하나도 없고 중복되는 숫자도 아예없는 경우를 처리해줘야 한다는 것입니다.
그래서 same이 0이라면 바로 [6, 6]으로 return 해주었습니다.
import Foundation
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
let zeroCnt = lottos.filter({ $0 == 0 }).count
let set1 = Set(lottos)
let set2 = Set(win_nums)
var same = 12 - set1.union(set2).count
if same == 0 {
return [6, 6]
}
if zeroCnt > 0 {
same -= (zeroCnt - 1)
}
var min = 7 - same
if min >= 6 {
min = 6
}
return [7 - (same + zeroCnt), min]
}