[プログラマー(LV 1)]楽透の最高と最低ランキング
2227 ワード
問題の説明
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]
}
見るからにめちゃくちゃだ複文を用いて2つの並び順を比較した.答えを提出して、他の人の答えを見た後、コードの効率を高めるために、もっと勉強すべきだと思います.修正されたコード
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になります.2つのコードを比較すると,可読性の差が大きい.さらに学び、徐々に発展する.
楽透の最高と最低ランキング
Reference
この問題について([プログラマー(LV 1)]楽透の最高と最低ランキング), 我々は、より多くの情報をここで見つけました https://velog.io/@kkll135/프로그래머스LV1로또의-최고-순위와-최저-순위テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol