공부 흔적남기기

프로그래머스 체육복 본문

코테/프로그래머스

프로그래머스 체육복

65살까지 코딩 2022. 1. 17. 00:15
728x90
반응형
import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public int solution(int n, int[] lost, int[] reserve) {
        //도둑이 여벌은 안훔쳐가고 원래 있던 체육복만 훔쳐가는 참 웃긴 문제다
        
        
        int answer = 0;
        // 이 문제를 풀때 상식적으로 생각한다면 순차정렬을 해야하므로 정렬
        Arrays.sort(lost);
        Arrays.sort(reserve);
        // arrayList를 좋아해서 ArrayList로 바꿈 
        ArrayList<Integer> lostList = new ArrayList<>();
        for (int i : lost) {
            lostList.add(i);
        }
        ArrayList<Integer> reserveList = new ArrayList<>();
        for(int i : reserve){
            reserveList.add(i);
        }
        // 먼저 잃어버린 친구들은 수업에 못들어가니까 answer에서 빼줌
        // 여벌을 받으면 answer을 +1 해줄것임
        answer = n - lostList.size();
        //[3,4], [2,3] -> 이 테스트 케이스 떄문에 꽤 애먹었음
        
        //체육복을 도난당했으나 여벌있는 참 웃긴 친구는 스스로 여벌이 있으므로 제외시켜줌
        //이런 조건이 있음 조건을 잘 읽어볼 것
        //여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 
        //이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복
        //을 빌려줄 수 없습니다
        for(int i =1; i<=n; i++) {
            if (lostList.contains(i) && reserveList.contains(i)) {
                lostList.remove(lostList.indexOf(i));
                reserveList.remove(reserveList.indexOf(i));
                answer++;
            }
        }
        
        //나는 여벌이 있는 친구를 기준으로 
        //앞에 있는 친구를 먼저 도난 당했는지 확인 후 도난 당했다면 여벌을 빌려주는 방식으로함
        //그후 뒤에 있는 친구를 확인인 후 도난 당햇다면 여벌을 빌려줌 
        for(int i =1; i<=n; i++){
            ////앞에 있는 친구를 먼저 도난 당했는지 확인 후 도난 당했다면 여벌을 빌려줌
            if(reserveList.contains(i) && lostList.contains(i-1)){
                lostList.remove(lostList.indexOf(i-1));
                answer++;
            ////그후 뒤에 있는 친구를 확인인 후 도난 당햇다면 여벌을 빌려줌 
            }else if(reserveList.contains(i) && lostList.contains(i+1)){
                lostList.remove(lostList.indexOf(i+1));
                answer++;
            }
        }

        return answer;
    }
}

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

 

코딩테스트 연습 - 체육복

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

programmers.co.kr

 

728x90
반응형