인프런 커뮤니티 질문&답변

km54277님의 프로필 이미지
km54277

작성한 질문수

정말 쉽게 풀어보는 코딩 테스트 top 기본 문제 (with 자바)

미팅룸2(Meeting Room2)

solve 메소드 안에 for문 질문드립니다

작성

·

221

1

답변 2

1

km54277님의 프로필 이미지
km54277
질문자

안녕하세요 강의 잘 보고 있습니다~!

0번째 interval을 힙에 먼저 넣고, poll()연산을 통해 큐에서 데이터를 얻어옵니다. 이때 poll()연산은 일종의 삭제처럼 데이터가 없어지는 거 아닌가요? peek()를 써도 되는지 궁금합니다. 소스코드에 나와있는 것처럼 poll()연산을 하면 회의실이 2개이상 필요해야하는 경우에 heap에서 데이터가 사라져버려서 카운팅(counting)이 제대로 안 이루어지는 건 아닌지 궁금합니다.

0

안녕하세요~~

이문제를 상당히 많은 분들이 질문을 주시는데요.

문제를 정확히 이해하면

(5,10), (15,20),(0,30) 이렇게 회의실 예약시간이 잡혀있는데 , 필요한 최소 회의실이 몇개인가 이게 문제의 요구사항입니다.

대부분의 코딩셤에서 망하는 이유가 문제를 정확히 이해하지 않아서 코딩만 하다가 시간 다 써버리는 경우입니다.

그래서 좀 불안하신분들은 필히 연습장에다가 그냥 본인이 이해한거를 적고 단계별로 적어 나가는게 차라리 낫다고 봅니다.

그럼 해볼게요

1 (5,10), (15,20),(0,30)  회의 시간이다.

2. 그럼 소팅을 해놓자 start타임으로(0,30), (5,10), (15,20) 순으로 객체가 소팅됩니다.(소팅 알고리즘 필요)

3. 처음 회의실은 무조건 첫번째가 가지고 간다 . 회의실은 무조건 1개가 필요하고 end time이 30분 이니까 다음 회의실이 필요한데5분, 15분 에 시작하니까 새로운 회의실이 필요하게 된다. 5분에시작하는 회의는 10분에 끝나니까 다음 15분에 시작하는 회의는 지금 사용하는 회의실을 사용하면된다 . 결론은 회의실이 2개 필요

=> 우선순위 큐중에 min큐를 이용하는데 end타임으로 소팅이 이루어진다(이진 바이너리 구조)

질문주신

1)이때 poll()연산은 일종의 삭제처럼 데이터가 없어지는 거 아닌가요? peek()를 써도 되는지 궁금합니다

=> poll()은 삭제가 되지만, peek()는 삭제 안됩니다.(엿보기기능입니다), 여기서는 쓰면 안되겠죠 ^^;

2)소스코드에 나와있는 것처럼 poll()연산을 하면 회의실이 2개이상 필요해야하는 경우에 heap에서 데이터가 사라져버려서 카운팅(counting)이 제대로 안 이루어지는 건 아닌지 궁금합니다.

=>poll()로 빼서 삭제 한후에 minHeap.offer(interval) 로 다시 집어 넣습니다.

여기서 잘생각해보시면 (0,30) 을 poll로 뽑아서 삭제한 다음에(minQueue 에서사라지죠)

다음꺼 (5,10)랑 end time(30)과 start time(5)으로 비교해보니..야 이거 회의실 하나 더 필요하네하니까

minHeap.offer(interval)로 다시 집어 넣습니다.

이부분이 다들 헷갈려 하시는거 같아요.

그러니까 뽑아서 비교를 해서 다시 넣는경우가 있고( 0,30)랑( 5.10)은 회의실이 하나 더필요한 경우이고

두번째는 뽑아서 비교를 해서 합쳐버리는 경우가 있고( 5,10)랑( 15.20)은 회의실이 필요없습니다. 그냥 사용하던 회의실을 계속 이용

디버깅으로 찬찬히 따라해 보시면 이해가 가실겁니다.

즐코딩~

 

km54277님의 프로필 이미지
km54277

작성한 질문수

질문하기