🕐 풀이 시간 : 30분
문제를 너무 쉽게 해결하려고했다..
실패코드대로 실행을 해버리면 끊어서 적당히 할 수 있는 상황에도 그대로 쭈욱 페인트칠을 해버린다. 즉 페인트를 낭비하게된다.
한 번 칠하게 되면 그 범위에 있는 목표들을 지워주고 싶었다.
그렇기에 리스트에 넣어두고 지워나가는 형식으로 진행하였다.
class Solution {
public int solution(int n, int m, int[] section) {
List<Integer>list = new ArrayList<>();
for(int v : section) list.add(v);
int answer = 0;
int range = 0;
while(list.size() > 0){
range = list.get(0) + m;
while(list.get(0) < range && list.size() >= 1){
list.remove(0);
answer++;
}
}
return answer;
}
}
해당 부분에서 왜 코드가 자꾸 에러가 발생하는지 이해가 안되었다..
isEmpty를 바꾸니 해결이 되었는데
isEmpty와 size > 0이 같은 조건으로 동작한다고 생각했다.
사실 size가 1이상인 게 비어있지 않은 조건이지 않은가..?
import java.util.*;
class Solution {
public int solution(int n, int m, int[] section) {
List<Integer> list = new ArrayList<>();
for (int v : section) list.add(v);
int answer = 0;
int range = 0;
while (!list.isEmpty()) {
range = list.get(0) + m;
while (!list.isEmpty() && list.get(0) < range) {
list.remove(0);
}
answer++;
}
return answer;
}
}
class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
for(int i = section[0] ; i <= section[section.length-1] ; i++){
i += m-1;
answer++;
}
return answer;
}
}