Dev/Algorithm

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

VIPeveloper 2024. 5. 20. 15:27
728x90
반응형

문제

 

생각

  • 생각을 하고, 구현하는 정도의 수준이 Lv1 이라면, 나는 그정도는 되는 것 같다는 생각이 들었다.
// 1. 1차원 밀대 배열 생성
// 2. 벽을 순회하며 X 발견 시
// 3. 길이만큼 순회하며 O로 변경
// 4. answer ++

코드

public class Main {
    public static void main(String[] args) {
        System.out.println(solution(8,4,new int[] {2, 3, 6}));
        System.out.println(solution(5,4,new int[] {1, 3}));
        System.out.println(solution(4,1,new int[] {1, 2, 3, 4}));
    }
    public static int solution(int n, int m, int[] section) {
        int answer = 0;

        // 1. 1차원 밀대 배열 생성
        int [] map = new int[n+1];
        for (int i = 0; i < section.length; i++) {
            // 벽을 칠해야할 곳은 다르게 표시
            map[section[i]]++;
        }

        // 2. 벽을 순회하며 X 발견 시
        for (int i = 1; i <= n; i++) {
            if(map[i]!=0){
                // 3. 길이만큼 순회하며 색칠된 곳 = O로 변경
                for (int j = i; j < i+m && j<map.length; j++) {
                    map[j] = 0;
                }
                // 4. answer ++
                answer++;
            }
        }

        return answer;
    }
}

다른 사람 풀이

public class Main {
    public static void main(String[] args) {
        System.out.println(solution(8,4,new int[] {2, 3, 6}));
        System.out.println(solution(5,4,new int[] {1, 3}));
        System.out.println(solution(4,1,new int[] {1, 2, 3, 4}));
    }
    public static int solution(int n, int m, int[] section) {
        int roller = section[0];
        int cnt = 1;
        for(int i = 1; i < section.length; i++) {
            // 덧칠이 필요한 섹션보다 현재 위치한 롤러 길이가 작다면 롤러 idx 를 이동시키고 cnt ++ 하는 로직
            if(roller + m - 1 < section[i]) {
                cnt++;
                roller = section[i];
            }
        }
        return cnt;
    }
}
728x90
반응형