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

윤소영·2024년 4월 10일
0

JAVA

목록 보기
40/41

문제


덧칠하기 문제 클릭!


문제 답안

class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 0;
        boolean[] paint = new boolean[n];
        for(int i = 0; i < section.length; i++){
            paint[section[i]-1] = true;
        }//n크기의 배열에 칠해야할 부분 true
        
        for(int i = 0; i < n; i++){
            if(paint[i] == true){
                if(i+m-1 < n){
                     for(int j = 0; j < m; j++){
                        paint[i+j] = false;
                    }
                    answer++;
                }
                else{
                    for(int j = 0; j < n-i; j++){
                        paint[i+j] = false; 
                    }
                    answer++;
                }
            }
        }
        return answer;
    }
}



답안 풀이

paint 배열을 만들어서 페인트칠을 했는지 안했는지 먼저 확인하는 배열 용도.
그래서 +m(i += m)씩 해주려했었는데 배열의 크기가 딱 m으로 나누어 떨어지지 않을 수도 있고 그러면 크기를 벗어나기 때문에 안될것같았다.
그래서 이중 for문을 써줘서 m씩 칠해주었다.(범위를 벗어날 때의 경우를 대비해 조건문을 썼다)
근데 다른 사람들 풀이를 보니까 배열을 굳이 이용안하고도 했길래 참고 할 만한 코드로 넣었다.


참고할만한 코드

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;
    }
}
class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 1;
        int start = section[0];

        for(int item : section){
            if(start + m > item)
                continue;
            start = item;
            answer++;
        }
        return answer;
    }
}

0개의 댓글