Contents
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정해진 구역을 다시 브러쉬로 칠해야 한다. 근데 최소한의 브러쉬질로 칠해야 한단다.
n -> 페인트가 칠해져야 하는 구역
m -> 브러쉬가 한 번에 칠할 수 있는 길이
section -> n의 길이 중 다시 칠해야 하는 곳이 담긴 배열
만약 section에 2, 3, 6이 있고 브러쉬가 한번에 칠할 수있는 길이가 4라면
한번 칠할 때 2, 3, 4, 5 칠하고
두번째 칠할 때 6부터 칠할 수 있으니까
2번만에 브러쉬질을 마무리지을 수 있는 것이다.
좀 어렵게 푼 거 같기도 하다 다른 사람들 풀이 보니까 나처럼 안풀었다더라
반복은 구지구지 n만큼 할 필요가 없다 section의 최소값부터 최대값까지 하면 된다.
last를 선언해서 브러쉬질한 끝 섹션을 넣어줘서 last보다 크거나 같을 때만 브러쉬질 카운트를 올려주었다.
// 프로그래머스 덧칠하기
// n -> 페인트가 칠해져야 하는 총 섹션. 칠해진 곳, 다시 칠해져야 하는 곳이 있다
// m -> 브러쉬가 한 번에 칠할 수 있는 길이
// section -> 다시 칠해야 하는 곳
// 최소 브러쉬질이 반환되어야 함
class Solution {
public int solution(int n, int m, int[] section) {
// s = section 배열 길이, last = 브러쉬한 마지막 섹션
// 반복은 n의 길이만큼 안해도 됨. section의 처음과 끝까지만 함
int s = 0, last = 0, answer = 0;
for (int i = section[0]; i <= section[section.length - 1]; i++) {
if (i == section[s] && i >= last) {
last = i + m;
// 다음 section
s++;
answer++;
}
// 겹치는 곳은 패스
else if (section[s] == i)
s++;
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 이진 변환 반복하기 (JAVA) (3) | 2025.01.25 |
---|---|
[프로그래머스] 2016년 (JAVA) (4) | 2025.01.25 |
[프로그래머스] 추억 점수 (JAVA) (0) | 2024.12.28 |
[프로그래머스] 달리기 경주 (JAVA) (0) | 2024.12.28 |
[프로그래머스] [PCCE 기출문제] 9번 / 지폐 접기 (JAVA) (2) | 2024.12.23 |