https://school.programmers.co.kr/learn/courses/30/lessons/161989
[프로그래머스] 덧칠하기 - 자바(Java) (tistory.com)
- section[0] 구역부터 시작하여 m-1까지 한번에 칠할 수 있다.
- 다시 칠하기로 한 영역(point)이 한 번에 칠할 수 있는 영역을 벗어나면 한 번 더 칠해야 한다.
- section 배열을 순회하여 point가 size보다 큰 지 판단한다.
- point가 size보다 작거나 같은 경우 한 번에 칠할 수 있는 영역 안에 속하므로 다시 칠하지 않아도 된다.
- point가 한 번에 칠할 수 있는 영역 size를 벗어나면 한 번 더 칠해야 한다, (answer++)
- 다시 칠해야 하는 지점 point부터 m-1까지 한 번에 다시 칠할 수 있다. (size = point+m-1)
정답
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 1;
//롤러 크기
int size = section[0]+m-1;
for(int point : section)
{
//point가 한 번에 칠할 수 있는 영역보다 크면
if(point>size)
{
//한번 더 칠하기
answer++;
//한 번에 칠할 수 있는 영역 갱신
size = point+m-1;
}
}
return answer;
}
}
다른 사람의 풀이
1)
class Solution {
public int solution(int n, int m, int[] section) {
int roller = section[0];
int cnt = 1;
for(int i = 1; i < section.length; i++) {
if(roller + m - 1 < section[i]) {
cnt++;
roller = section[i];
}
}
return cnt;
}
}
2)
class Solution {
public int solution(int n, int m, int[] section) {
int maxPainted = 0, cntPaint = 0;
for (int point : section) {
if (maxPainted <= point) {
maxPainted = point + m;
cntPaint++;
}
}
return cntPaint;
}
}
'Java > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 없는 숫자 더하기 (0) | 2024.05.17 |
---|---|
[JAVA] 프로그래머스 - 음양 더하기 (0) | 2024.05.17 |
[JAVA] 프로그래머스 - 직사각형 별찍기 (0) | 2024.05.16 |
[JAVA] 프로그래머스 - 서울에서 김서방 찾기 (0) | 2024.05.16 |
[JAVA] 프로그래머스 - 두 정수 사이의 합 (0) | 2024.05.16 |