끄적끄적 코딩일지

[Programmers]체육복(난이도:★★★★★) 본문

알고리즘

[Programmers]체육복(난이도:★★★★★)

BaekGyuHyeon 2022. 5. 17. 09:01

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        int answer = 0;
        return solutionA(n,lost,reserve);
    
    }
    public int solutionA(int n, int[] lost, int[] reserve){
        int answer = n - lost.length;
        // index 앞 뒤로 비교할꺼기 때문에 정렬
        sort(lost);
        sort(reserve);
        // 여분을 가지고 있는 사람이 체육복을 잃어버리면 여분 목록에서 제거
        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;
                    answer++;
                    break;
                }
            }   
        }
        // 앞 뒤 인덱스와 비교해서 숫자가 일치하면 counter 증가 및 제거
        for(int i = 0 ; i < lost.length; i++){
            if(lost[i] == -1)
                continue;
            for(int j = 0; j < reserve.length; j++){
                if(reserve[j] == -1)
                    continue;
                if(lost[i] == reserve[j]-1 || lost[i] == reserve[j]+1){
                    answer++;
                    reserve[j] = -1;
                    break;
                }
            }
        }
        return answer;
    }
    public void sort(int[] arr){
        int idx = arr.length -1;
        for(int i = 0 ; i < arr.length; i++){
            for(int j = 0; j < idx; j++){
                if(arr[j] > arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }
}