Algorithm/inflearn

결혼식

마닐라 2021. 10. 7. 23:26

 

일단 오는 시간 순서대로 정렬을 한다.

앞의 문제와는 다르게 참석해있는 친구를 계속 유지시켜주어야한다.

따라서 각 시간마다 상태 값(state)을 두어서 처리를 한다.

오는 시간과 떠나는 시간이 겹치게 되면 떠나는 것 먼저 처리를 해준다.

상태 값이 's' 이면 오는 것 'e' 이면 떠나는 것으로 구분하여 각 스텝마다 최대 인원을 계산한다.

 

import java.util.*;

class Time implements Comparable<Time> {
    public int time;
    public char state;
    Time(int time, char state) {
        this.time = time;
        this.state = state;
    }

    @Override
    public int compareTo(Time ob) {
        //시간이 같으면 상황(e or s)에서 정렬 -> e먼저 출력
        if(this.time==ob.time) return this.state-ob.state;
        //같지 않으면 시간으로만 정렬
        else return this.time-ob.time;
    }

}

class Main {
    public int solution(ArrayList<Time> arr){
        int answer = Integer.MIN_VALUE;
        Collections.sort(arr);
        //현재 존재하는 사람 수
        int cnt = 0;
        for(Time ob : arr) {
            if(ob.state=='s') cnt++;
            else cnt--;
            //피로연장에 동시에 존재하는 최대 인원을 구하는 것임
            answer = Math.max(answer ,cnt);
        }


        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        ArrayList<Time> arr = new ArrayList<>();
        for(int i = 0; i < n; i++) {
            int sT = kb.nextInt();
            int eT = kb.nextInt();
            arr.add(new Time(sT, 's'));
            arr.add(new Time(eT, 'e'));
        }
        System.out.println(T.solution(arr));

    }
}

 

 

 

'Algorithm > inflearn' 카테고리의 다른 글

다익스트라 알고리즘  (0) 2021.10.08
★최대수입스케쥴(PriorityQueue)  (0) 2021.10.08
회의실 배정  (0) 2021.10.07
#씨름 선수(Greedy)  (0) 2021.10.07
피자 배달거리(DFS 활용)  (0) 2021.10.06