오늘의 알고리즘은 로또의 최고 순위와 최저 순위 알아보기.
아니 문제를 읽다보니 수학문제 같은 느낌이 났다. 누가 달력을 찢어서 없어지고,, 물을 엎어서 숫자가 없어지는...
이 문제도 동생이 낙서를 하는 바람에 번호의 일부가 유실되어 시작된 것.
유실된 번호는 0으로 줄테니 당첨 번호와 비교했을 때 나올 수 있는 최고 순위와 최저 순위를 [Int]로 반환하면 되는 문제였다.
예시를 보면 더 이해가 쉽다. 모든 숫자가 안보여서(동생 진짜 때리고 싶겠다) 내가 선택한 로또 번호인 lotts에 0이 여섯개 들어오면 1등 번호인 win_nums 배열과 비교했을 때 가능한 최고 등수는 1등이고 최저 등수는 6등이다.
내가 푼 방법은 아래와 같다.
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
// 맞은 개수: 등수
let prize: [Int: Int] = [6 : 1, 5 : 2, 4 : 3, 3 : 4, 2 : 5, 1 : 6, 0 : 6]
var win_numbers = win_nums
var count = 0
for win_num in win_numbers {
if lottos.contains(win_num) {
count += 1
win_numbers = win_numbers.filter { $0 != win_num}
}
}
// 0의 갯수
let zeroCounts = lottos.filter { $0 == 0 }.count
let remainsWinNums = win_numbers.count
let bestMatch: Int = zeroCounts - remainsWinNums >= 0 ? count + remainsWinNums : count + zeroCounts
let worstMatch: Int = count
return [prize[bestMatch] ?? 0, prize[worstMatch] ?? 0]
}
prize를 미리 지정해두었다. 맞은 개수: 등수를 매칭해두어 바로 리턴할 수 있도록..!
그리고 win_numbers를 돌면서 lottos에 들어있는 숫자라면 count를 1올리고 지우는 작업을 해주었다.
lottos의 0 갯수와 남은 로또 번호 수를 비교해서
zeroCounts >= remainsWinNums이면 count에 remainWinNums를 더하고 아닌 경우는 zeroCounts를 더해 bestPrize를 구했다.
나름 빨리 푼다고 풀었는데 다른 분들 보니까 더 간단하게 푸신 분들도 많더라.. 분발해야징
반응형
'Algorithm' 카테고리의 다른 글
Swift로 프로그래머스 문제 풀기 - 숫자 문자열과 영단어 (0) | 2022.07.06 |
---|---|
Swift로 Leet Code 문제 풀기 - 28. Implement strStr() (Easy) - range(of:)/distance(from: to:) 사용해보기 (0) | 2022.06.30 |
Swift로 Leet Code 문제 풀기 - 27. Remove Element (Easy) (0) | 2022.06.29 |
Swift로 Leet Code 문제 풀기 - 26. Remove Duplicates from Sorted Array (Easy) (0) | 2022.06.28 |
Swift로 Leet Code 문제 풀기 - 21. Merge Two Sorted Lists (Easy) (0) | 2022.06.27 |