본문 바로가기

카테고리 없음

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

 

문제 종류 - 그리디 (Greedy)

문제 바로가기

 

 

★ Point

1. 여벌 옷을 가지고 있는 학생이 도난 당한 학생에도 속하는지 먼저 검사하여 -1로 만들어준다. 

2. lost와 reserve 배열을 상대로 이중 for문을 돌아 옷을 빌려주면 -1로 만들어 뒤의 학생에게 빌려주지 않도록 한다.

(어짜피 lost는 문제에서 오름차순으로 정렬되어있기 때문에 이렇게 차례로 검사하는게 가능하다.)

 

 

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        int exist = 0;
        int count = 0;
        
        //여벌 옷을 가지고 있는 학생이 도난 당하면 빌려줄 수 없도록 만든다.
        for(int i=0; i<lost.length; i++) {
            for(int j=0; j<reserve.length; j++) {
                if(lost[i]==reserve[j]) {
                    exist++;
                    lost[i] = -1;
                    reserve[j] = -1;
                    break;
                }
            }
        }
        
        //옷을 빌려주고 -1로 만들어 뒤의 학생에게 빌려주지 않게 한다.
        for(int i=0; i<lost.length; i++) {
            for(int j=0; j<reserve.length; j++) {
                if(lost[i]==reserve[j]+1 || lost[i]==reserve[j]-1) {
                    count++;
                    reserve[j] = -1;
                    break;
                }
            }
        }
        //answer은 전체 학생수에서 잃어버린 학생 수를 뺀다.
        //후에 여벌옷을 가진 학생이 도난 당했으면 그 수만큼 더해주고 옷을 빌려준 학생 수 만큼 다시 더해준다.
        answer = n - lost.length + exist + count;
        
        return answer;
    }
}