https://programmers.co.kr/learn/courses/30/lessons/77484
제한사항
- lottos는 길이 6인 정수 배열입니다.
- lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
- 0은 알아볼 수 없는 숫자를 의미합니다.
- 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
- lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
- win_nums은 길이 6인 정수 배열입니다.
- win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
- win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
- win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.
//
// main.swift
// Programmers_로또최고최저순위
//
// Created by 임지성 on 2021/09/24.
//
import Foundation
func solution(_ lottos: [Int], _ win_nums: [Int]) -> [Int] {
let zeroCount = lottos.filter({ $0 == 0 }).count
//filter 함수를 사용하여 $0에 lottos 값 iteration, 0과 일치하는 횟수 저장
let winCount = lottos.filter({ win_nums.contains($0) }).count
//win_nums와 일치하는 수의 갯수 저장
//win_nums는 0을 제외한 lottos와의 일치 횟수 (win_nums는 0이 올수 없음(제한 사항))
return [winCount+zeroCount, winCount].map({ $0 <= 1 ? 6 : 7 - $0 })
}
//print(solution([44, 1, 0, 0, 31, 25], [31, 10, 45, 1, 6, 19]))
고차함수 사용
0은 낙서로 가려진 수 이므로 무슨 수가 올지 모름 = 어떠한 수든 올 수 있음 = 당첨일 수도 아닐 수도 있다는 것
최고등수와 최저등수를 도출하는 것이기에, 낙서로 가려져 모르는 수 0의 갯수를 결과값에 추가하는 식
filter 함수를 사용하여 $0에 lottos 값 iteration, 0과 일치하는 횟수 저장
contains 함수로 lottos 값이 포함되어있는지 순회하며 확인 후 일치 횟수 저장 -> 0을 제외한 일치횟수 저장 = 최저등수
최고등수는 최저등수 기준인 win_nums에 zeroCount를 더하여 일치 갯수를 매김
-> 0은 무슨 수든 올 수 있기때문에 전부 맞췄다는 가정 = 최고등수
조건에 0, 1개를 맞춘 로또 등수는 6등이므로 삼항연산 활용
6개 전부 맞추면 1등
5개 맞추면 2등
4개 맞추면 3등
... 2개맞추면 5등이므로 7에서 맞춘 갯수값을 빼주면 등수가 나옴
ex) 내가 기입한 로또 [44, 1, 0, 0, 31, 25] 로또 정답 [31, 10, 45, 1, 6, 19] -> 맞은 갯수 31, 1, 0, 0 (0은 무슨 수든 올 수 있으므로 정답처리) 총 4개, 7-4 = 3, 즉 3등이므로 4개맞추면 3등 조건에 부합
'Algorithm' 카테고리의 다른 글
[Programmers] K번째 수 (0) | 2021.09.25 |
---|---|
[Programmers] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천 (0) | 2021.09.24 |
[Programmers] 두 개 뽑아서 더하기 (0) | 2021.09.14 |
[Programmers] 카카오 크레인 인형 뽑기 게임 (0) | 2021.09.12 |
[프로그래머스] 카카오 인턴 - 키패드 누르기 (0) | 2021.09.06 |
댓글