문제
1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권이 있습니다.
맞힌 개수 - 순위
6 - 1위
5 - 2위
4 - 3위
3 - 4위
2 - 5위
그 외 - 6위(낙첨)
고른 숫자중 알아볼 수 없는 숫자는 0으로 표기됩니다.
모든 0이 맞았다면 최고 점수가
모든 0이 틀렸다면 최저 점수가 나옵니다.
로또 번호를 담은 배열 : lottos
당첨 번호를 담은 배열 : win_nums
당첨 가능한 최고 순위와 최저 순위를 차례대로 담은 배열을 return하라
제한사항
- lottos는 길이 6인 정수 배열입니다.
- lottos의 모든 원소는 0 이상 45 이하인 정수입니다.
- 0은 알아볼 수 없는 숫자를 의미합니다.
- 0을 제외한 다른 숫자들은 lottos에 2개 이상 담겨있지 않습니다.
- lottos의 원소들은 정렬되어 있지 않을 수도 있습니다.
- win_nums은 길이 6인 정수 배열입니다.
- win_nums의 모든 원소는 1 이상 45 이하인 정수입니다.
- win_nums에는 같은 숫자가 2개 이상 담겨있지 않습니다.
- win_nums의 원소들은 정렬되어 있지 않을 수도 있습니다.
문제 풀이
swift 문법이 궁금하던 때에 사용한 코드입니다.
import Foundation
func evaluate(n : Int) ->Int {
if n == 6 {
return 1
} else if n == 5{
return 2
} else if n == 4{
return 3
} else if n == 3{
return 4
} else if n == 2{
return 5
} else {
return 6
}
}
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
// set a list of final answer
var answer = [Int]()
// set an int for a number of matched numbers
var NofMatched = 0 // NofMatched == worst case
var NofZeros = 0
for lotto in lottos {
if lotto != 0 {
for win_num in win_nums {
if win_num == lotto {
NofMatched += 1
}
}
} else { // count number of zeros in lottos
NofZeros += 1
}
}
let bestCase = NofMatched+NofZeros
answer.append(evaluate(n: bestCase))
answer.append(evaluate(n: NofMatched))
return answer
}위 코드를 python3으로 바꿔서 작성해보자. 바꾸면서 개선 가능한 부분도 개선해보자.
# 매칭된 숫자의 개수(n)에 따른 순위를 return하는 함수 (개선됨)
# if,elif,else 문에 패턴이 존재합니다. return값은 7-n
def evaluate(n) :
if n == 0 :
return 6
return 7-n
def solution(lottos, win_nums) :
answer = []
# worst case
nOfMatched = 0
nOfZeros = 0
# 매칭된 개수와 Zero가 몇개인지 찾는 로직 (개선 방법이 있을 것으로 보입니다.)
for lotto in lottos:
if lotto != 0 :
for win_num in win_nums:
if win_num == lotto :
nOfMatched += 1
else:
nOfZeros += 1
bestCase = nOfMatched + nOfZeros
answer.append(evaluate(bestCase))
answer.append(evaluate(nOfMatched))
return answer