728x90
https://school.programmers.co.kr/learn/courses/30/lessons/161989#
일반 풀이
- 배열 사용해서 페인트 영역 표시
- 다시 칠해야 하는 영역 시 페인트 칠하고
- 칠한 부분 스킵
간결한 풀이
- 다시 칠해야 하는 첫 영역 기록 -> cur
- cur + m -1 값(롤러 길이)이 다음 칠해야 하는 영역보다 작거나 같을 때
- cur = 다음 다시 칠해야 하는 영역
- 2, 3 반복
일반 풀이 코드
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
boolean[] wall = new boolean[n + m + 1];
// 페인트 영역 표시
for (int i : section) {
wall[i] = true;
}
for (int i = 1; i <= n; i++) {
// 칠해야 하는 부분
if (wall[i]) {
// 칠해주기
for (int j = 0; j < m; j++) {
wall[j] = false;
}
// 찰한 부분 스킵
i += m - 1;
answer++;
}
}
return answer;
}
}
간결한 풀이 코드
class Solution {
public int solution(int n, int m, int[] section) {
//다시 칠해야하는 첫 영역 기록 -> cur
int cur = section[0];
int answer = 1;
for(int i = 1; i < section.length; i++) {
//cur + m -1 값(롤러 길이)이 다음 칠해야 하는 영역보다 작거나 같을때
if(cur + m - 1 < section[i]) {
//cur = 다음 다시 칠해야하는 영역
cur = section[i];
answer++;
}
}
return answer;
}
}
728x90
'알고리즘 풀이' 카테고리의 다른 글
[프로그래머스] 바탕화면 정리 자바(Java) (0) | 2023.03.26 |
---|---|
[프로그래머스] 대충 만든 자판 자바(Java) (0) | 2023.03.25 |
[프로그래머스] 멀리 뛰기 자바(Java) (0) | 2023.03.23 |
[프로그래머스] 예상 대진표 자바(Java) (0) | 2023.03.23 |
[프로그래머스] 기사단원의 무기 자바(Java) (0) | 2023.03.21 |
댓글