Jam's story

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

코딩테스트/프로그래머스

[프로그래머스 ] 체육복

애플쩀 2022. 6. 23. 07:12
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        // 1. student 배열 생성
        //매번 앞뒤로 검색해야하는데, 1일때와 마지막 숫자일때 if문으로 거르는 처리를 두려면 
        //코드가 지저분해지니, 0번 인덱스와 마지막인덱스+1는 0으로 초기화해서 
        //사용하지 않는 배열로 냅둔다. 
        //인덱스가 0= 자기꺼만있음 1=여분있음 -1는 빌려야함 
        int[] student = new int[n + 2];
        int answer = 0;

        // 2. reserve / lost 정보 반영
        for (int l : lost)
            student[l]--;
        for (int r : reserve)
            student[r]++;

	
        // 3. 여분을 기준으로 앞뒤를 확인하여 체육복을 빌려준다.
        for (int i = 1; i <= n; i++) {
            if (student[i] == 1) {
            //앞이 체육복이없다면 
                if (student[i - 1] == -1) {
                    student[i]--;
                    student[i - 1]++;
                
                //뒤가 체육복이 없다면 
                } else if (student[i + 1] == -1) {
                    student[i]--;
                    student[i + 1]++;
                }
            }
        }

        // 4. 체육복을 갖고 있는 학생 수를 계산한다.
        for (int i = 1; i <= n; i++)
            if (student[i] > -1)
                answer++;
        return answer;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        int[] lost = { 2, 4 };
        int[] reserve = { 1, 3, 5 };
        System.out.print(sol.solution(5, lost, reserve));
    }
}

 

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[예산]  (0) 2022.06.28
[프로그래머스] 폰캣몬  (0) 2022.06.24
[프로그래머스] 모의고사  (0) 2022.06.22
[JAVA] - K번째수  (0) 2022.06.21
[프로그래머스] 완주하지 못한 선수  (0) 2022.06.20
Comments