본문으로 바로가기
반응형

 

관련글

 

배열 관련 포스팅은 여기를 참조

 

 

1. 개요

 

문제의 링크는 여기를 참조

 

문제의 내용은 아래의 더보기를 클릭하여 참조

 

N명의 학생 중, 체육복의 여벌이 있는 학생(0~N) / 여벌이 없는 학생(0~N) / 도난 당한 학생(0~N)이 있고, 인접 번호일 경우 도난 당한 학생에게 여별이 있는 학생이 체육복 빌려주기가 가능할 때, 체육복을 입고 체육 수업을 들을 수 있는 최대 인원을 구하는 문제

참고로, 도난 당한 학생이 여벌이 있었을 수도 있다.

 

 

2. 풀이

 

각 학생 번호 별로 현재 가진 체육복의 수를 구하고, 반복문을 통해 대여가 필요한 학생에 대여 후, 체육복을 입을 수 있는 학생의 수는 구하는 문제

 

 

3. 코드

 

아래의 코드를 통해 정답을 알아보자.

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        // 현재 옷의 수를 저장
        int[] clothes = new int[n+1];
        for(int i=0; i < lost.length; i++){
            clothes[lost[i]]--;
        }
        for(int i=0; i < reserve.length; i++){
            clothes[reserve[i]]++;
        }
        
        // 옷의 수에 따라 체육복 나눠주고 그 결과 저장
        int answer = 0;
        for(int i=1; i <= n; i++){
            if(clothes[i] == -1){
            
                // 더 작은 번호 학생이 여벌이 있는 경우
                if(i-1 > 0 && clothes[i-1] == 1){
                    answer++;
                    
                // 더 큰 번호 학생이 여별이 있는 경우
                } else if(i+1 <= n && clothes[i+1] == 1){
                    clothes[i+1]--;
                    answer++;
                }
            // 원래 갖고 있거나, 여벌이 있는 경우
            } else if(clothes[i] >= 0){
                answer++;
            }
        }
        
        return answer;
    }
}

 

 

읽어주셔서 감사합니다. 오류가 있으면 지적해주시면 반영하겠습니다.

반응형