Swift랑 친해지기/programmers 풀기

[프로그래머스] 덧칠하기 (Swift)

데브킹덕 2023. 6. 7. 12:12

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이)

1.벽을 표현하는 array를 만들어 줬음(array를 0으로 n개 채움)

 

2. section의 위치를 파악해 벗겨진 위치에 1을 넣어주도록 함

- section의 위치는 1부터 새서 인덱스와 일치시키도록 -1을 해줌

 

3. 인덱스 0 (벽의 1번 )부터 벽의 길이-붓의길이-1까지를 차례로 탐색해 1이 있으면 벽에 덧칠해주었음

ex)붓의 길이(m)가 4라고 가정했을때 벽의 1(p)번부터 4번까지 덧칠한다고 해봄

그러면 인덱스는 0부터 3까지 칠해져야함

따라서 p...p+m-1를 0으로 바꿔주고 count를 1 증가시킴

 

4. 벽의길이-붓의길이 부터 벽의 끝까지 중 1을 가지고 있다면 count를 1증가시키도록함

* 벽의 길이 - 붓의 길이를 따로 검사한 이유는 인덱스 범위(벽의 길이를 넘어가) 밖을 접근해 오류가 생김     

import Foundation

func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
    
    var wall = Array(repeating: 0, count: n)
    
    for i in 0..<section.count{
        wall[section[i]-1] = 1
        
    }
    
    var count = 0
    
    
    for p in 0..<wall.count-m{
        if wall[p] == 1{
            for k in p...p+m-1{
                wall[k] = 0
            }
            count += 1
        }
    }
    
    if wall[(wall.count-m..<wall.count)].contains(1){
        count += 1
    }

    return count
}