스터디/Algorithm

[프로그래머스스쿨] 체육복 java - greedy

혜유우 2024. 9. 25. 15:59

리스트를 처음에 정렬해야 함

lost와 reserve 모두에 해당하는 학생 먼저 판단한 후에

나머지 학생들을 판단해야 한다.

나 같은 경우에는 빌려준 학생 처리를 -1로 하고 싶지 않아서

int[]에 있던 데이터를 ArrayList에 넣고

빌린 경우에 리스트에서 값을 remove로 제거하도록 코드를 구현했다.

but.. remove로 값을 제거하는 경우에 index도 함께 -1 update 해줘야 함..

(이 부분 놓쳐서 계속 부분점수 나왔다 ㅜㅜ)

 

https://school.programmers.co.kr/learn/courses/30/lessons/42862?language=java#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

import java.util.*;
class Solution {
    public int solution(int n, int[] lost, int[] reserve) {        
        ArrayList<Integer> lostList = new ArrayList<>();
        ArrayList<Integer> reserveList = new ArrayList<>();

        for(int i=0;i<lost.length;i++){
            lostList.add(lost[i]);
        }

         for(int i=0;i<reserve.length;i++){
            reserveList.add(reserve[i]);
        }

        Collections.sort(lostList);
        Collections.sort(reserveList);

        int answer = n-lost.length;

        for(int i=0;i<lostList.size();i++){
            int lStudent = lostList.get(i);
            for(int j=0;j<reserveList.size();j++){
                int rStudent = reserveList.get(j);
                if(lStudent == rStudent){
                    reserveList.remove(j);
                    lostList.remove(i);
                    answer++;
                    i--;
                    j--;
                    break;
                }
            }
        }
        for(int i=0;i<lostList.size();i++){
            int lStudent = lostList.get(i);        

            for(int j=0;j<reserveList.size();j++){
                int rStudent = reserveList.get(j);
                if(lStudent-1 == rStudent || lStudent+1 ==rStudent){
                    reserveList.remove(j);
                    answer++;
                    j--;
                    break;
                }
            }
        }

        return answer;
    }
}