Development Logs/Algorithms

[JAVA] 프로그래머스 : 체육복 (코딩테스트 고득점 kit > 탐욕법(Greedy))

유뱅유뱅뱅 2020. 8. 2. 23:51

https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번�

programmers.co.kr

해결 방안

문제에 따른 단순 구현으로 해결함

1. answer에 전체 사람 수 만큼 저장

2. lost, reverse에 같이 포함되어있는 학생이 있으면 -1로 바꿈

3. lost 돌면서 reverse에서 빌려 줄수 있는지 확인하고 못빌려주면 answer--

코드

// 체육복
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        answer = n;
        
        // lost, reverse에 같이 포함되어 있는 학생 있으면 -1로 바꿈
        for(int i=0; i<lost.length; i++){
            for(int j=0; j<reserve.length; j++){
                if(lost[i] == reserve[j]){
                    lost[i] = -1;
                    reserve[j] = -1;
                }
            }
        }
        
        // lost 돌면서 reserve에서 빌려 줄 수 있는지 확인하고 못빌려주면 answer--
        for(int i=0; i<lost.length; i++){
            if(lost[i] == -1)
                continue;
            
            boolean rentCheck = false;
            int j=0;
            while(j < reserve.length){
                if(reserve[j] == -1){
                    j++;
                    continue;
                }
                    
                if(lost[i] == (reserve[j] -1) || lost[i] == (reserve[j] + 1) ){
                    rentCheck = true;
                    reserve[j] = -1;
                    break;
                }
                else{
                    j++;
                }
            }
            
            if(!rentCheck)
                answer--;
        }
        
        return answer;
    }
}