https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그램 제작자
코드 중심 개발자를 고용하십시오. 배치 기반 위치 매칭. 프로그래머의 개발자별 프로필에 가입하고 기술 호환성이 좋은 회사와 연결하십시오.
Programmer.co.kr
도색되지 않은 부분(0)과 칠해진 부분(1)을 부울 배열에 별도로 삽입했습니다.
그런 다음 전체 영역을 돌아 다니며 칠하지 않은 부분이 있으면 거기에서 시작하여 m 길이로 칠했습니다.
여기에서 점 i에서 길이 m을 그리는 것이 불가능한 분기점이 있습니다. 즉, i에 칠하면 롤러의 길이가 나머지 부분, 즉 그 위로 넘어가는 부분의 길이보다 길다는 것! 일탈해서는 안 된다고 작업에 명시되어 있고, 배열의 범위 밖에 있기 때문에… 현재 위치가 i+mn을 넘으면 도색되지 않은 부분이 아무리 많아도 한 번만 칠하면 된다. 마지막 셀과 일치합니다. 따라서 이 경우에는 답변 + 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)))