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

[lv1] 덧칠하기

은더기 2024. 6. 16. 17:22

문제

 

내 정답 코드

import Foundation

func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
    // n 은 벽에 길이
    // m 은 한 번에 칠할 수 있는 길이
    // section 은 칠해야 하는 구역
    
    // 가장 먼저 있는 빈 구역 m만큼 칠하고 section에서 삭제
    
    var section = section
    var result = 0
    
    // sction의 처음으로 와서 m만큼 숫자를 모두 삭제
    // 다시 section 맨 앞으로 돌아와 반복
    while(!section.isEmpty) {
        let first = section.first!
        let last = first+m-1 < n ? first+m-1 : n
        (first...last).map {
            if !section.isEmpty {
                if $0 == section.first! {
                    section.removeFirst()
                }
            }
        }
        result += 1
    }
    
    return result
}

 

#

1. m만큼 칠하면서 section의 인덱스를 모두 지우면 된다.

2. section에 첫번째 수를 가져와 그 수부터 m만큼 칠하면서 setcion에 해당하는 수가 있다면 해당 값을 section에서 제거해준다.

3. 위 과정을 반복하여 section이 빈 배열이 될 때 까지 수행한다.

4. 반복문의 count를 세어 result로 반환한다.


배운 기술