코테 준비-문제풀기

그리디 - JAVA 프로그래머스 풀어보기[테스트용] / 체육복

FireStone 2022. 4. 14. 01:20

[기록용]

기록용이므로 자세한 풀이는 설명하지 않습니다

이전에 풀었던 방식은 이중포문을 돌아서 좀 더 간단하게 풀어보기로 함

1) 체육복을 잃어버린 사람은 -1, 갖고있는 사람은 0, 여유분이 있는 사람은 1 로 표기함

2) -1 값을 가진 사람 앞뒤에 여유분이 있는 사람이 있는지 확인

3) 있으면 빌려줘서 둘다 0으로 초기화

4) 없으면 answer 값을 -1 씩 감소 ( 체육복을 못입는 사람이므로) 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = n;
        int[] arr = new int[n+2]; // 처음 인덱스와 마지막 인덱스를 0으로 해놓기 위함 
        
        for(int i : lost){
            arr[i]--;
        }
        for(int i: reserve){
            arr[i]++;
        }
        
        for(int i=1; i<arr.length-1; i++){
            if(arr[i] == -1){
                if(arr[i-1]== 1){
                    arr[i] = 0;
                    arr[i-1] = 0;
                }
                else if(arr[i+1] ==1){
                    arr[i] = 0;
                    arr[i+1] = 0;
                }
                else
                   answer --; 
            }
        }
        return answer;
    }
}