class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
int[] arr = new int[n];
for(int i=0;i<n;i++) {
arr[i]=1;
}
for(int i=0;i< section.length;i++) {
arr[section[i]-1]=0;
}
for(int i=0;i<n-m;i++) {
if(arr[i]==0) {
for(int j=i;j<m+i;j++) {
arr[j]=1;
}
answer++;
}
}
for(int i=n-m;i<n;i++) {
if(arr[i]==0) {
answer++;
break;
}
}
return answer;
}
}
모두 1이고 길이가 n인 배열을 만들어놓고,
section의 숫자에 해당하는 배열의 값을 0으로 만든다.
그 이후 for문을 돌리며 값이 0일 때는 m칸만큼 1로 만들고 덧칠 횟수를 1 올린다.
끝부분은 인덱스 허용범위를 넘어갈 수 있기 때문에 따로 for문을 만들어서 덧칠했다.
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;
}
}
배열이 아니어도 됐던 것이다.
색칠했다고 생각하며 index를 그만큼 옮기면 쉽게 해결 할 수 있었겠다.
문제를 보고 고정관념에 사로잡히지 않길!