- 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/77484
코딩테스트 연습 - 로또의 최고 순위와 최저 순위
로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호
programmers.co.kr
난이도: Level 1
- 제출 답안
import Foundation
func rankingBy(_ win: Int) -> Int {
switch win {
case 6: return 1
case 5: return 2
case 4: return 3
case 3: return 4
case 2: return 5
default: return 6
}
}
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
let low = lottos.filter( win_nums.contains ).count
let hidden = lottos.filter{ $0 == 0 }.count
let high = low + hidden
let lottoResult = [high, low].map{ rankingBy($0)}
return lottoResult
}
- 풀이
먼저 이 문제는 lottos 와 win_nums의 관계, 그리고 점수 구성이 어떻게 되는지의 알고리즘이 중요합니다.
최저 순위(low)는 숨겨진 숫자(hidden -> 0)가 전부 틀리다면 0을 제외한 숫자 중 win_nums에 해당하는 숫자 만큼 맞힌 숫자가 됩니다.
최저 순위는 0을 생각할 필요가 없는거죠.
반면 최고 순위(high)은 0이 전부 맞는다는 가정으로 hidden과 low가 합친 숫자 만큼 맞힌 숫자가 만들어 집니다.
그리고 rankingBy 함수에 switch를 이용해서 맞힌 숫자를 순위로 변환할 수 있는 함수를 만들었습니다.
마지막으로 lottoResult 변수에 각 맞힌 숫자를 순위로 변환하면서 최고, 최저 순위 배열이 만들어졌습니다.
'iOS > 알고리즘' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2021.10.04 |
---|---|
[프로그래머스] 체육복 (0) | 2021.09.21 |
[프로그래머스]기능개발 (0) | 2021.08.23 |
[프로그래머스]모의고사 (0) | 2021.08.22 |
[백준]1789번: 수들의 합 (0) | 2021.08.15 |