본문 바로가기

프로그래머스 (Swift)/lv 1

[lv1] 실패율

문제

 

 

내 정답 코드

import Foundation

func solution(_ N:Int, _ stages:[Int]) -> [Int] {
    var result:[Int] = []
    var stage: [Stage] = []
    var count: [Int] = []
    var stageCount = stages.count
    
    for i in 1...N {
        for j in 0..<stages.count {
            if stages[j] <= i && stages[j] > i-1 {
                count.append(j)
            }
            
            if j == stages.count-1 {
                stage.append(Stage(stage: i, failPersent: Double(count.count) / Double(stageCount)))
                stageCount -= count.count
                count = []
            }
        }
    }
    
    stage.sort(by: { $0.failPersent > $1.failPersent })
    stage.map { result.append($0.stage) }
    
    return result
}

struct Stage {
    var stage:Int
    var failPersent:Double
}

 

#

1. stage와 실패율을 갖는 Stage 구조체를 만든다.

2. 1부터 N단계 까지 반복문을 돌린다.

3. 0부터 stages만큼 반복문을 돌린다.

4. stages의 값이 현재 단계에서 실패한 값인지 판별한다. (i보다 작거나 같거나, i-1보다 큰 경우)

5. 판별된 인덱스의 값을 count 배열에 담는다.

6. 두번째 반복문이 끝날 때, Stage의 현재 단계와 해당 단계의 실패율을 append해준다. (count의 개수 / 남은 stage의 개수)

7. 판별된 stage 개수를 총 stage에서 빼준다. (stageCount - count.count)

8. Stage의 실패율로 정렬을 하고

9. 정렬된 배열에서 단계만 뽑아 Int배열에 추가하여 반환한다.


배운 기술

'프로그래머스 (Swift) > lv 1' 카테고리의 다른 글

[lv1] 평균 구하기  (0) 2024.09.02
[lv1] 숫자 짝꿍  (0) 2024.08.30
[lv1] 핸드폰 번호 가리기  (0) 2024.08.21
[lv1] x만큼 간격이 있는 n개의 숫자  (0) 2024.08.21
[lv1] 두 개 뽑아서 더하기  (0) 2024.08.07