포스트

216. 로또의 최고 순위와 최저 순위


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    
    var arr : [Int] = []
    var winNums : [Int] = []
    var convert : [Int] = []
    var answer : [Int] = []
    
    var zerocount : Int = 0
    var count : Int = 0
    
    arr = lottos.filter{$0 != 0}.sorted()
    zerocount = lottos.filter{$0 == 0}.count
    
    winNums = win_nums.sorted()
    
    for i in arr {
        for j in winNums {
            if i == j {
                count += 1
            }
        }
    }
    
    convert.append(count+zerocount)
    convert.append(count)
    
    for i in convert {
        
        switch i {
            case 6 :
                answer.append(1)
            case 5 :
                answer.append(2)
            case 4 :
                answer.append(3)
            case 3 :
                answer.append(4)
            case 2 :
                answer.append(5)
            default :
                answer.append(6)
        }
    }
    
    return answer
}

처음에는 문제가 뭔가 싶었다.

알고보니 0이 가려진 숫자였고 그 가려진 숫자가 맞거나 아니거나인 경우를 생각해서 구하면 되는문제였다.

우선 원래의 배열에서 0을 제외한 배열을 새로 만들어 주었고, 0의 갯수도 별도로 카운트 해주었다.

그리고 계산하기 쉽게 오름차순 정렬도 한번 해주었다.

그리고 for문을통해 두개의 값이 일치할때 카운트를 증가 해주었다.

그리고 해당 카운트와 0의 갯수를 더한 값이 최고 성적일 것이고,

최저성적은 그냥 카운트만 했을때 이므로 일단 두배열애 담아주었고

또 for문을 돌려서 switch case를 통해 등수를 리턴하게 하였다.

푸는것에 의미를 두기위해 1차원 적으로 접근을 해보았다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.