• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

MeetingRoom2에 관해서

20.12.27 21:46 작성 조회수 155

1

질문이 있습니다.

1) 해당 문제에서 priorityQueue를 사용해서 푸신 이유가 궁금합니다.  

2) 55번 줄 

max = Math.max(max,minHeap.size())를 쓴 이유가 궁금합니다.

답변 2

·

답변을 작성해보세요.

0

효하님의 프로필

효하

질문자

2021.01.02

친절한 답변감사합니다^^

0

안녕하세요~~반갑습니다~~^^;

1) 해당 문제에서 priorityQueue를 사용해서 푸신 이유가 궁금합니다.  

=> 이 문제에 핵심은 지금 회의시간 종료시간과 다음 회의시간 시작시간이 겹치는가

안겹치면 기존회의실을 그대로 이용하면되는거죠..

그래서 priorityQueue에 넣었다가 위 조건에 겹치게 되면 기존걸 빼버리고 (poll) 다시 합쳐서 넣어버리면 되는거죠

priorityQueue는 내부적으로 자기가 알아서 오름차순으로(minHeap) 관리를 해줍니다. 그래서 사용한거죠

요약하면,

1. 오름차순으로 회의 종료시간을 계속들어오는 데이타를 비교해서 저장해주는 자료구조(priorityQueue)

2. 지금회의종료시간 다음회의 시작시간이 안 겹치면 회의실은 그대로 사용

=> 이부분 기존걸 poll하고 새로운걸 넣어버리면 되는거죠 (문제에서 [5, 10], [15,20] = > [5,20] 이라고 볼수 있음)

결론적으로 pq는 기존에 pq에 존재하는놈을 빼서, 새로운놈이랑 합쳐서 다시 pq에 넣는 구조에서 주로 쓰인다고

보시면됩니다. 다시 pq에 들어가서 오름차순, 내림차순으로 정렬이 자동으로 되니까 맨위에 있는것을 컨트롤 할수가 있죠

2) 55번 줄 max = Math.max(max,minHeap.size())를 쓴 이유가 궁금합니다.

아래처럼 바꾸셔도 됩니다. for문 안에 있다보니까 max를 따로 저장했습니다.

for(int i=0; i<intervals.length; i++) {

while(!minHeap.isEmpty() &&  minHeap.peek().end <= intervals[i].start) {

minHeap.poll(); //15,20 }

minHeap.offer(intervals[i]); //0 30 , 5 10, 

//max = Math.max(max, minHeap.size());

}

return minHeap.size();

수고하세요~