프로그래머스 : 로또의 최고 순위와 최저 순위(Swift)

처음 풀어보는 프로그래머스 문제. 지문은 길지만 간단한 문제였다. 낙서된 숫자의 개수와 맞힌 숫자의 개수를 파악해 가능한 최고 등수와 최저 등수를 알아내면 된다. 즉 0이 3개일때, 맞힌 숫자가 1개일때는 0이 모두 맞췄을때와 맞힌숫자가 1개 이므로 총 4개의 숫자를 맞힌게 되니 3등이 되고, 최저는 0이 모두 틀렸다고 가정하게 1개만 맞춘것이므로 6등이 된다.

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    //0의 개수+맞은 번호 개수
    var max = lottos.filter{(i:Int)in i==0}.count + lottos.filter{(i:Int)in win_nums.contains(i)}.count
    if 7-max>6 {
        max = 6
    }else{
        max = 7-max
    }
    
    //맞은 번호의 개수
    var min =  lottos.filter{(i:Int)in win_nums.contains(i)}.count
    if 7-min>6 {
        min = 6
    }else{
        min = 7-min
    }
    return [max,min]
}

 

로또 번호 생성 함수를 추가해 풀이를 하였다.

 //로또번호 생성
func makeLottoNum()->[Int]{
    var randomNum = 45
    var nResult:[Int] = []
    var list = Array(1...45)
    for _ in 1...6{
        var randomNum = Int(arc4random_uniform(UInt32(randomNum)))
        nResult.append(list[randomNum])
        list[randomNum] = list.last!
        randomNum -= 1
    }
    print(nResult)
    return nResult
}

//민우의 로또번호
func minwooNum()->[Int]{
    var randomNum = 45
    var nResult:[Int] = []
    var list = Array(1...45)
    for _ in 1...6{
        var randomNum = Int(arc4random_uniform(UInt32(randomNum)))
        nResult.append(list[randomNum])
        list[randomNum] = list.last!
        randomNum -= 1
    }
    for item in 0...Int(arc4random_uniform(UInt32(5))) {
        nResult[item] = 0
    }
    print(nResult)
    return nResult
}

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    //0의 개수+맞은 번호 개수
    var max = lottos.filter{(i:Int)in i==0}.count + lottos.filter{(i:Int)in win_nums.contains(i)}.count
    if 7-max>6 {
        max = 6
    }else{
        max = 7-max
    }
    
    //맞은 번호의 개수
    var min =  lottos.filter{(i:Int)in win_nums.contains(i)}.count
    if 7-min>6 {
        min = 6
    }else{
        min = 7-min
    }
    return [max,min]
}

print(solution([1,1,1,1,1,1], makeLottoNum()))