문제 :
https://programmers.co.kr/learn/courses/30/lessons/77484
1. 문제 이해하기
- 로또는 총 1~ 45까지의 숫자 중 6개 찍어서 맞추는 방식
- 로또 당첨 숫자(win_nums), 내가 찍은 숫자(lottos)가 주어졌을 때, 당첨 내용에 부합할 수 있는 가장 높은 순위와 낮은 순위를 배열로 출력
- 알아볼 수 없는 숫자(0)가 존재
2. 문제 풀이 생각하기
- 먼저 0이 아닌 로또를 찍은 모든 숫자를 당첨 숫자와 비교해서 맞은 개수를 저장합니다.
- 그와 동시에 0의 개수도 셉니다. 그 이유는 당첨 순위의 최대 , 최소만 구하면 되기 때문에 0을 모두 맞은 것으로 처리하거나, 다 틀린 것으로 간주하기 위함입니다.
- 당첨 개수가 6개이기 때문에 해시 테이블을 이용해서 [맞은 번호 개수 : 순위] 형태로 저장하고, 맞은 번호 개수의 해당하는 순위를 각각 maxValue, minValue에 저장해서 출력합니다.
- 여기서 maxValue = 맞은 개수 + 0의 개수, minValue = 맞은 개수로 최대, 최소를 출력할 수 있습니다.
3. 차근차근 구현하기
import Foundation
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
var winCount = 0
var zeroCount = 0
var maxValue = 0
var minValue = Int.max
// [맞은 번호 개수 : 순위]
let ht : [Int : Int] = [6 : 1, 5 : 2, 4 : 3, 3 : 4, 2 : 5, 1 : 6, 0 : 6]
for lotto in lottos {
if lotto == 0 {
zeroCount += 1
continue
}
for winNum in win_nums {
if lotto == winNum {
winCount += 1
}
}
}
maxValue = ht[winCount + zeroCount]!
minValue = ht[winCount]!
return [maxValue, minValue]
}
4. 피드백
- 구현실력이 점점 늘고 있는 것 같습니다.
'Algorithm > Swift' 카테고리의 다른 글
[Programmers] 오픈채팅방 (Swift) (0) | 2021.07.13 |
---|---|
[Programmers] 행렬 테두리 회전하기 (Swift) (0) | 2021.07.10 |
[백준 16931] 겉넓이 구하기 (Swift) (0) | 2021.07.06 |
[Programmers] 카카오 인턴십 - 경주로 건설 (Swift) (0) | 2021.07.03 |
[Programmers] 2020 카카오 인턴십 - 보석쇼핑 (Swift) (0) | 2021.07.02 |