Problem

 

총 학생의 수, 체육복을 도난 당한 학생, 체육복을 더 가져온 학생 리스트가 주어졌을 때

 

체육 수업에 참여할 수 있는 학생의 수를 구하는 문제입니다.

 

체육복은 인접한 학생에게밖에 빌려주지 못하며 무조건 1벌의 여벌밖에 없습니다.

 

여벌의 체육복을 가져온 사람도 체육복을 하나 도난당할 수 있습니다.

 

 

 

Solution

학생 수만큼 clothes 배열을 선언하여 상태를 정의합니다.

 

상태
-1 도난당한 학생
0 체육복을 갖고 있는 학생
1 여벌이 존재하는 학생


lost 배열에 있으면 -1 하고 reserve 배열에 있으면 +1 합니다.

 

만약 여벌의 체육복이 있는데 도난당한 학생은 0 으로 본인의 체육복만 소지한 상태가 됩니다.

 

그 다음에 clothes 배열을 한번 돌면서 -1 인 index 의 앞 뒤를 확인하면서 1 이 있다면 0 으로 만들어주면 됩니다.

 

최종 결과는 배열에서 -1 값의 갯수를 리턴해줍니다.

 

 

Java Code

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int[] clothes = new int[n+2];
        int count = 0;

        for (int i : lost)    clothes[i]--;
        for (int i : reserve) clothes[i]++;
        
        for (int i = 1; i< n+1; i++) {
            if (clothes[i] == -1) {
                if (clothes[i-1] == 1) {
                    clothes[i-1]--;
                    clothes[i]++;
                } else if (clothes[i+1] == 1) {
                    clothes[i+1]--;
                    clothes[i]++;
                }
            }
            
            if (clothes[i] != -1) {
                count++;
            }
        }
        
        return count;
    }
}

 

+ Recent posts