알고리즘/프로그래머스

[프로그래머스] 탐욕법 - 구명보트

땀두 2022. 3. 23. 08:41

 

배열 하나를 만들어서, lost 배열에 인덱스 값은 1씩 빼주고, reserve 배열에 인덱스 값들은 1씩 더해준다. 이 기초 배열을 토대로 반복실행하여 해당 인덱스가 체육복이 없는 상황이면 인덱스가 마지막 학생이 아닌 경우, 뒤에 학생의 옷이 두 벌일 때 빌리고, 첫번째 학생이 아닌 경우, 앞에 학생이 옷이 두 벌일 때 빌리는 방식으로 답을 구해가면 된다.

 

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