[プログラマー]コードテスト練習-貪欲な1級運動服



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