inflearn logo
강의

Course

Instructor

Java Coding Test - IT Conglomerate Problem Set

6. "Most Used Meeting Room" Code Explanation

가장 많이 사용된 회의실

117

youngyou1324

11 asked

0

안녕하세요 강사님 강의 잘 듣고 있습니다

 

강사님 코드를 보면서 드는 의문이 굳이

while문이 필요한 가 입니다.

while문에 없어도 어쩌피 if else로직만으로도 잘 답을 가져오는 거 같아서요

혹시 예외 케이스가 있나요?

 


```java

package org.youyk.inflearn.latest.sec03.Problem6;

import java.util.*;
class Solution7 {
    public int solution(int n, int[][] meetings){
        int answer = 0;

        int[] rest = new int[n];
        // 끝나는 시간, 순번
        PriorityQueue<int[]> rooms = new PriorityQueue<>((a,b)->a[0] == b[0] ? a[1]-b[1] : a[0] - b[0]);
        TreeSet<Integer> roomSet = new TreeSet<>();

        for(int i=0;i<n;i++){
            roomSet.add(i);
        }
        Arrays.sort(meetings,(a,b)->a[0] - b[0]);

        for(int[] m : meetings){

            if(!roomSet.isEmpty()){
                int r = roomSet.pollFirst();
                rest[r]++;
                rooms.add(new int[]{m[1],r});
            }else{
                int[] poll= rooms.poll();
                rest[poll[1]]++;
                rooms.add(new int[]{poll[0] + (m[1] - m[0]), poll[1]});
            }
        }

        int max=0;
        for(int i=0;i<n;i++){
            if(max<rest[i]){
                max = rest[i];
                answer = i;
            }
        }

        return answer;
    }

    public static void main(String[] args){
        Solution7 T = new Solution7();
        System.out.println(T.solution(2, new int[][]{{0, 5}, {2, 7}, {4, 5}, {7, 10}, {9, 12}}));
        System.out.println(T.solution(3, new int[][]{{3, 9}, {1, 10}, {5, 8}, {10, 15}, {9, 14}, {12, 14}, {15, 20}}));
        System.out.println(T.solution(3, new int[][]{{1, 30}, {2, 15}, {3, 10}, {4, 12}, {6, 10}}));
        System.out.println(T.solution(4, new int[][]{{3, 20}, {1, 25}, {5, 8}, {10, 15}, {9, 14}, {12, 14}, {15, 20}}));
        System.out.println(T.solution(2, new int[][]{
                {0, 5}, {1, 2}, {2, 3}, {3, 6}, {6, 8}
        }));

    }
}

```

 

 

java 코딩-테스트

Answer 2

0

codingcamp

안녕하세요^^

while 문이 빠지면

문제에서 2번 조건 :

"사용가능한 회의실이 여러개일 경우 가장 번호가 낮은 회의실에 회의를 배정해야 한다"

를 지키지 못하는 경우가 생깁니다.

아래 입력은 답이 0번 회의실이 답이 되는 예제입니다. 하지만 while문을 빼면 1를 출력합니다.

System.out.println(T.solution(2, new int[][]{{0, 9}, {2, 7}, {10, 12}}));

 

 

 

 

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

Solution7 클래스의 코드를 살펴보면, 두 가지 주요 자료구조가 사용되고 있습니다. 첫 번째는 회의실 예약 상태를 추적하기 위한 PriorityQueue<int[]> rooms이고, 두 번째는 회의실 번호를 관리하는 TreeSet<Integer> roomSet입니다. 여기서 의문을 제기하신 while 문은 현재 코드 안에 존재하지 않습니다.

코드에서 rooms 우선순위 큐를 사용하여 회의가 끝나는 시간을 기준으로 가장 먼저 끝나는 회의(즉, 가장 빠르게 비어지는 회의실)를 제어하고 있으므로, 이 방식은 주어진 문제를 해결하는 데 가장 적합한 구조입니다. if-else 구조로도 동일한 결과를 도출할 수 있지만, PriorityQueue를 사용함으로써 회의실 관리의 효율성을 높일 수 있습니다.

단, 코드에서 rest[r]++의 의미는 각 회의실이 몇 번 사용되었는지를 저장하는 배열로, 회의실 사용 빈도의 최대값을 파악하여 가장 많이 사용된 회의실을 찾는 부분에서 활용됩니다. 따라서 PriorityQueueTreeSet 모두 필요한 요소라고 볼 수 있습니다.

다음 기존의 유사한 질문에 대한 답변들을 참고하실 수 있습니다:
- 시작시간을 기준으로 해도 답이 나오는데 괜찮나요?
- 최대수입스케줄 문제 j선언 차이

위 링크의 게시물에서는, 알고리즘 구성에 대한 논리적인 구조의 유효성 및 개선점이 상세히 설명되어 있으니, 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

비밀번호

0

65

1

과일 가져가기 이러한 경우에는 반례가 생기지 않나요?

0

161

2

cpu 스케줄링

0

105

2

외부 문제 질문

0

122

2

심사위원 문제 시간복잡도 질문

0

127

1

현관문 출입순서

0

96

1

미로의 최단거리 통로

0

74

1

집으로 이동 문제 코드

0

124

1

채점 사이트 개설

0

161

2

송아지를 잡자

1

110

1

다익스트라 + 환승횟수

0

135

2

문제풀이 해설 질문입니다.

0

124

2

"이동 횟수" 문제가 변형된다면?

0

155

2

예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ

0

248

1

"비밀번호" 문제 확인 부탁드립니다!

0

170

1

최대 길이 연속수열 질문

0

192

1

잃어버린 강아지 문제 count 관련 질문있습니다

0

202

1

바둑대회 질문입니당

0

221

1

5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다

0

310

1

알파코드 풀이질문입니다

0

216

1

7번 비밀 번호 문제에 시간복잡도가 궁금합니다!

0

162

1

혹시 이렇게 작성해도 괜찮나요?

0

284

2

문제풀이 확인 부탁드립니다.

0

244

1

혼자서 푼 문제 확인 부탁드립니다.

0

298

1