728x90
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
Bool 배열에 안 칠한 부분(0) 칠한 부분(1)을 구분해서 넣어줬다.
그리고 전체를 돌면서 안칠한 부분이라면 그곳에서 시작해서 m길이만큼 칠해줬다.
여기서 분기점이 하나 있는데, 어떤 지점 i에서 m 길이만큼 칠할 수 없는 경우다. 즉, i에서 칠하게 되면 롤러의 길이가 남은 부분의 길이보다 길어서 넘어가는 부분! 벗어나면 안 된다고 문제에 명시되어 있기 때문에 그리고 배열의 out of range가 되므로... 현재 위치 i + m 이 n을 넘어가는 경우에는 어차피 안 칠한 부분이 몇 개든 상관없이 마지막 칸에 맞춰서 한번만 쭉 칠하면 되기 때문에 이 경우 answer + 1 만 진행하고 끝내준다.
+ 어떤 분은 되게.. 깔끔하게 배열도 안 쓰고 푸셨던데.. 보고도 잘 모르겠어서.. 나중에 다시 풀어봐야겠다!^^
import Foundation
//section: 칠할 영역
//한번의 페인트칠에 연속된 m개의 구역 칠할 수 있음(m=롤러길이)
func solution(_ n:Int, _ m:Int, _ section:[Int]) -> Int {
var answer = 0
var array = [Bool](repeating: true, count: n+1)
for i in 0..<section.count { array[section[i]] = false }
for i in 1...n {
if i > n-m+1 && !array[i] {
answer += 1
break
}else {
if !array[i] {
for j in i..<i+m { array[j] = true }
answer += 1
}
}
}
return answer
}
print(solution(8, 4, [2,3,6]))
print(solution(5, 4, [1,3]))
print(solution(4, 1, [1,2,3,4]))
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Swift] 택배 배달과 수거하기 (0) | 2023.03.25 |
---|---|
[프로그래머스/Swift] 이모티콘 할인 행사 (2023 Kakao Blind) (0) | 2023.03.24 |
[프로그래머스/Swift] 둘만의 암호 (0) | 2023.02.12 |
[프로그래머스/Swift] k진수에서 소수 개수 구하기 (0) | 2023.01.15 |
[프로그래머스/Swift] 점프와 순간 이동 (0) | 2023.01.15 |