본문 바로가기
코딩테스트

[그리디] 프로그래머스 체육복

by Enhydra lutris 2022. 10. 4.

Arrays.fill(배열 이름, 초기화 할 값)

배열을 특정값으로 한번에 초기화

import java.util.*;
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int[] student = new int[n];
        Arrays.fill(student, 1); // 가지고 있는 체육복 개수(배열 특정값으로 한번에 초기화)
        int answer = n;

        //체육복 도난 당한 학생
        for (int i : lost)
            student[i - 1] -= 1;
        //여벌 체육복 가진 학생
        for (int i : reserve)
            student[i - 1] += 1;

        //도난 당한 학생에게 여벌 체육복 빌려주는 경우
        for (int i = 0; i < student.length; i++) {
            if (student[i] == 0) {
                if (i > 0 && student[i - 1] == 2)
                    student[i - 1] -= 1;
                else if (i < n - 1 && student[i + 1] == 2)
                    student[i + 1] -= 1;
                else
                    answer--; //answer은 전체 학생수로 초기화 되었기 때문에 체육활동 불가능한 학생수를 빼면
            }                 //체육활동이 가능한 학생수를 알 수 있다.
        }
        return answer;
    }
}

student 배열을 1을 채워서 모두가 체육복을 하나씩 가지고 있는 상태에서 lost한 학생의 체육복 수를 -1하고 reserve한 학생의 체육복 수를 +1 한후, 체육복이 0개인 학생들 앞뒤에 체육복을 빌려줄 수 있는 학생이 있는지 확인 한뒤 있으면 빌려준 학생의 체육복 수를 -1하고 없으면 체육에 참여할 수 있는 학생수를 줄인다.

댓글