프로그래머스

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

채니◟( ˘ ³˘)◞ 2023. 9. 5. 15:14

o 문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


ㅇ 풀이

 

벽의 길이 크기의 배열(paint)을 생성 후, 기본으로 모두 1로 준 다음, 다시 칠해야할 부분을 0으로 바꾼다.

그 후 paint 배열을 돌면서 0인 부분에서 롤 크기(m) 의 길이만큼 1로 바꿔준다.

이때 주의할 점은 paint 크기를 넘어서 1로 바꾸는 인덱스 오류가 나지 않기 위해 paint 길이보다 적게 바꿔줘야 한다.

 

class Solution {
    public int solution(int n, int m, int[] section) {
        int[] paint = new int[n];

        for (int i = 0; i < paint.length; i++) {
            paint[i] = 1;
        }

        for (int i = 0; i < section.length; i++) {
            paint[section[i] - 1] = 0;
        }

        //System.out.println(Arrays.toString(paint));

        int cnt = 0;

        for (int i = 0; i < paint.length; i++) {

            for (int k = 0; k < paint.length; k++) {
                if (paint[k] == 1)
                    break;
            }

            if (paint[i] == 0) {

                for (int j = i; j < i + m; j++) {
                    if(j < paint.length){
                        paint[j] = 1;
                    }
                }
                cnt++;
            }
        }
        return cnt;
    }
}