[프로그래머스(LV1)]로또의 최고 순위와 최저 순위
문제설명
0이상 45이하인 6개의 정수를 입력받고 당첨 번호와 비교하여 등수를 출력.
이때 알아볼 수 없는 번호를 0으로 두어 최저 등수와 최고 등수를 출력해야 함.
예시)
내가 작성한 코드
import Foundation
var zeroCount: Int = 0
var numCount: Int = 0
var high: Int = 0
var low: Int = 0
var resultHigh: Int = 0
var resultLow: Int = 0
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
for i in 0...5{
for j in 0...5{
if lottos[i] == 0{
zeroCount += 1
break
} else {
if lottos[i] == win_nums[j]{
numCount += 1
}
}
}
}
high = numCount + zeroCount
low = numCount
switch high {
case 6:
resultHigh = 1
case 5:
resultHigh = 2
case 4:
resultHigh = 3
case 3:
resultHigh = 4
case 2:
resultHigh = 5
default:
resultHigh = 6
}
switch low {
case 6:
resultLow = 1
case 5:
resultLow = 2
case 4:
resultLow = 3
case 3:
resultLow = 4
case 2:
resultLow = 5
default:
resultLow = 6
}
return [resultHigh, resultLow]
}
한 눈에 봐도 굉장히 지저분한 코드였다. 반복문을 이용하여 두 배열을 차례대로 모두 비교하였다. 답안을 제출 후 다른 분들의 답을 보고 코드의 효율성을 올리기위해서는 많이 배워야겠다는 생각이 들었다.
수정한 코드
import Foundation
func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
let zeroCount = lottos.filter{$0 == 0}.count
let winCount = win_nums.filter{lottos.contains($0)}.count
return [min(7-zeroCount-winCount, 6), min(7-winCount, 6)]
}
눈에 띄게 짧아진 것을 볼 수 있다. filter를 이용하여 lottos 배열 안에 0이 몇개 있는지 알아내었고, 마찬가지로 lottos 배열 안 값이 win_nums배열 안에 몇개가 포함되는지 알아내어 최고, 최저 등수를 구했다. 이때 7-zeroCount-winCount나 7-winCount의 식이 7이 될 수도 있기 때문에 가장 낮은 등수 6과 비교하여 구해주었다.
filter
단어 뜻 그대로 내부 값을 걸러서 추출한다. 예를 들어
let x = [1, 2, 3, 4, 5]
var y = x.filter{$0 < 5}
위와 같은 코드가 있다면 y의 출력값은 1, 2, 3, 4가 될 것이다.
작성한 두 코드를 비교해보면 딱 봐도 가독성의 차이가 크다. 더 공부하여 점점 발전시키겠다.
Author And Source
이 문제에 관하여([프로그래머스(LV1)]로또의 최고 순위와 최저 순위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kkll135/프로그래머스LV1로또의-최고-순위와-최저-순위저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)