[프로그래머스][Java]덧칠하기

Boknami·2023년 8월 11일
0

프로그래머스

목록 보기
15/29

🕐 풀이 시간 : 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;
    }
}

0개의 댓글

관련 채용 정보