sorting & thinking 7번 최소 회의실 개수
안녕하세요 강사님 자바 알고리즘 입문 강좌에 이어 이번 강좌 까지 들으며 많은 도움을 받고 있는 수강생입니다. 우선 양질의 강의를 제공해주신 것에 감사드립니다.
이번 문제에서 저는 아래와 같이 코드를 작성했습니다. 자료구조 파트 마지막 문제와 유사하다고 생각했서 아래와 같이 풀었습니다.
저는 해법 영상에서와 같은 논리라고 생각하는데 혹시 논리적 오류가 있을까요?
public int solution(int[][] meetings) {
int answer = 0;
PriorityQueue<Meeting> pq = new PriorityQueue<>();
Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
for (int[] meeting : meetings) {
if (pq.isEmpty()) {
pq.add(new Meeting(meeting[1], answer));
answer++;
} else {
if (pq.peek().end <= meeting[0]) {
pq.add(new Meeting(meeting[1], pq.poll().room));
} else {
pq.add(new Meeting(meeting[1], answer));
answer++;
}
}
}
return answer;
}
답변 2
1
안녕하세요^^
Meeting 클래스까지 있는 풀코드를 올려주세요. 에지케이스가 있는지 확인해볼께요.
0
풀코드는 아래와 같습니다!
class Meeting implements Comparable<Meeting> {
int end;
int room;
public Meeting(int end, int room) {
this.end = end;
this.room = room;
}
@Override
public int compareTo(Meeting o) {
return this.end - o.end;
}
}
class Solution {
public int solution(int[][] meetings) {
int answer = 0;
PriorityQueue<Meeting> pq = new PriorityQueue<>();
Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
for (int[] meeting : meetings) {
if (pq.isEmpty()) {
pq.add(new Meeting(meeting[1], answer));
answer++;
} else {
if (pq.peek().end <= meeting[0]) {
pq.add(new Meeting(meeting[1], pq.poll().room));
} else {
pq.add(new Meeting(meeting[1], answer));
answer++;
}
}
}
return answer;
}
public static void main(String[] args) {
Solution T = new Solution();
System.out.println(T.solution(new int[][]{{0, 10}, {20, 25}, {5, 15}, {2, 5}}));
System.out.println(T.solution(new int[][]{{1, 30}, {2, 15}, {3, 10}, {4, 12}, {6, 10}}));
System.out.println(T.solution(new int[][]{{3, 9}, {1, 10}, {5, 8}, {10, 15}, {9, 14}, {12, 14}, {15, 20}}));
System.out.println(T.solution(new int[][]{{0, 5}, {2, 7}, {4, 5}, {7, 10}, {9, 12}}));
}
}
0
안녕하세요, 인프런 AI 인턴입니다.
귀하의 코드에서는 알고리즘이 올바르게 작동합니다. 또한 자료구조 파트 마지막 문제와 유사하다면, 동일한 알고리즘을 사용하는 것이 적절해 보입니다. 따라서 논리적인 오류는 발견되지 않았습니다.
하지만, 코드를 더 개선해 볼 수도 있습니다. 예를 들어, 위 코드에서는 answer 변수를 높이는 곳을 놓칠 수 있습니다. 이 경우, 답이 올바르게 계산되지 않습니다. 또한, 불필요한 연산을 줄일 수 있다면 성능을 더 개선할 수 있을 것입니다.
즉, 아래와 같은 코드를 추천합니다.
public int solution(int[][] meetings) {
int answer = 0;
PriorityQueue
Arrays.sort(meetings, (a, b) -> a[0] - b[0]);
for (int[] meeting : meetings) {
if (pq.isEmpty()) {
pq.add(new Meeting(meeting[1], answer));
} else {
if (pq.peek().end <= meeting[0]) {
pq.poll();
} else {
answer++;
}
pq.add(new Meeting(meeting[1], answer));
}
}
return ++answer;
}
기존의 코드에서, 만약 pq.isEmpty()인 경우, answer 변수를 1 증가시키고 pq에 추가하는 것이 좋습니다. 그리고, pq.poll()를 할 때 answer 변수를 갱신하는 것도 잊지 마세요. 마지막으로, ++answer를 반환하여 답을 계산하면 됩니다.
이 방법을 적용하면, 성능이 더 향상될 것입니다. 이번 문제 풀이에 대한 질문을 보내주셔서 감사합니다.
비밀번호
0
68
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
163
2
cpu 스케줄링
0
107
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
118
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
98
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
125
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
156
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
249
1
"비밀번호" 문제 확인 부탁드립니다!
0
171
1
최대 길이 연속수열 질문
0
193
1
잃어버린 강아지 문제 count 관련 질문있습니다
0
204
1
바둑대회 질문입니당
0
222
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
311
1
알파코드 풀이질문입니다
0
218
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
164
1
혹시 이렇게 작성해도 괜찮나요?
0
287
2
문제풀이 확인 부탁드립니다.
0
246
1





