해결된 질문
작성
·
237
0
안녕하세요 강사님 자바 알고리즘 입문 강좌에 이어 이번 강좌 까지 들으며 많은 도움을 받고 있는 수강생입니다. 우선 양질의 강의를 제공해주신 것에 감사드립니다.
이번 문제에서 저는 아래와 같이 코드를 작성했습니다. 자료구조 파트 마지막 문제와 유사하다고 생각했서 아래와 같이 풀었습니다.
저는 해법 영상에서와 같은 논리라고 생각하는데 혹시 논리적 오류가 있을까요?
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
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를 반환하여 답을 계산하면 됩니다.
이 방법을 적용하면, 성능이 더 향상될 것입니다. 이번 문제 풀이에 대한 질문을 보내주셔서 감사합니다.
풀코드는 아래와 같습니다!