덧칠하기 (자바)

김재현·2023년 11월 25일
0

알고리즘 풀이

목록 보기
29/89
post-thumbnail
post-custom-banner

문제

정답 코드

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를 그만큼 옮기면 쉽게 해결 할 수 있었겠다.

문제를 보고 고정관념에 사로잡히지 않길!

profile
I live in Seoul, Korea, Handsome
post-custom-banner

0개의 댓글