[프로그래머스] 코딩테스트 연습 - 탐욕법(Greedy) Level 1 체육복

uoahy·2021년 9월 15일
0

Solution.java

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        
        boolean[] robbed = new boolean[n];
        boolean[] spare = new boolean[n];
        
        for (int i = 0; i < lost.length; i++) robbed[lost[i] - 1] = true;
        for (int i = 0; i < reserve.length; i++) {
            if (robbed[reserve[i] - 1]) robbed[reserve[i] - 1] = false;
            else spare[reserve[i] - 1] = true;
        }
        
        for (int i = 0; i < n; i++) {
            if (robbed[i]) {
                if (i > 0 && spare[i - 1]) {
                    robbed[i] = spare[i - 1] = false;
                }
                else if (i < n - 1 && spare[i + 1]) {
                    robbed[i] = spare[i + 1] = false;
                }
            }
            
            if (!robbed[i]) answer++;
        }
        
        return answer;
    }
}

문제를 풀고 난 후 다른 사람의 풀이를 보면서 배열의 크기를 n + 2로 선언하면 추가 조건 검사가 필요없다는걸 깨달았다.

다음번에 비슷한 문제를 만나면 써먹어봐야겠다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

0개의 댓글