기록하는 개발자

[프로그래머스][JAVA] 체육복 본문

Algorithm

[프로그래머스][JAVA] 체육복

밍맹030 2021. 6. 14. 00:09
728x90

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        
        //n=10일 경우 10-1과 10+1을 확인하므로 all[11]인 12번 째 인덱스 까지 포함하여 초기화
        int[] all = new int[n+2]; 
        
        /* default : 0
            -1	도난당한 학생
            0	체육복을 갖고 있는 학생
            1	여벌이 존재하는 학생 */
        
        //여벌이 있는 학생 1 증가
        for (int i : reserve) 
            all[i]++;

        //잃어버린 학생 1 감소
        for (int i : lost)
            all[i]--;
        
        //1부터 n번째 학생까지 탐색
        for (int i = 1; i < n+1; i++) {
            if (all[i] == -1) { //i번 째 학생에게 체육복이 없는 경우
                
                if (all[i-1] == 1) { //왼쪽 학생한테 여분의 체육복이 있는 경우
                   all[i-1]--;      //왼쪽 학생에게 체육복을 빌리고 1 감소
                   all[i]++;        //i번 째 학생에게 체육복이 생겼으므로 1 증가
                }
                
                else if (all[i+1] == 1) { //오른쪽 학생한테 여분의 체육복이 있는 경우
                    all[i+1]--;           //오른쪽 학생에게 체육복을 빌리고 1 감소
                    all[i]++;             //i번 째 학생에게 체육복이 생겼으므로 1 증가
                }
            }
            
            if(all[i] != -1) //i번 째 학생에게 체육복이 있는 경우
                answer++;    //answer 1 증가      
        }

        return answer;
    }
}
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/42862

 

728x90