본문 바로가기

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

[lv1] 덧칠하기

문제

 

내 정답 코드

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로 반환한다.


배운 기술

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

[lv1] 둘만의 암호  (0) 2024.06.25
[lv1] 없는 숫자 더하기  (0) 2024.06.25
[lv1] 과일 장수  (0) 2024.06.16
[lv1] 콜라 문제  (0) 2024.06.12
[lv1] 삼총사  (0) 2024.06.12