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
}
'Swift랑 친해지기 > programmers 풀기' 카테고리의 다른 글
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT[3차] 압축 (Swift) (0) | 2023.06.26 |
---|---|
[프로그래머스] 2개 이하로 다른 비트 (Swift) -10,11 실행초과 (0) | 2023.06.18 |
[프로그래머스] 2021 Dev-Matching: 웹 백엔드 개발자(상반기)행렬 테두리 회전하기 (Swift) (0) | 2023.06.01 |
[프로그래머스] 연속 부분 수열 합의 개수 (Swift) ※10,20번 시간초과 해결 (0) | 2023.05.30 |
[프로그래머스] Summer/Winter Coding(~2018) 방문 길이 (Swift) (2) | 2023.05.26 |