728x90
반응형
오늘의 학습 키워드
- 정렬
오늘의 회고
1. 문제
2. 해결 방안
import java.util.*;
class Solution {
// 솔루션 1 (내가푼 것)
public int solution(int[] citations) {
int cnt = 0; // 논문 몇편 이상인지 카운팅
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); // 가장 큰 값부터 체크해서 카운팅하기 위해 최대값부터 뽑을 수 있는 우선순위큐 사용
for(int i=0; i< citations.length; i++) {
pq.add(citations[i]);
}
for(int h=citations.length; h>=0; h--) { // h(답)은 논문 개수 이하여야 함. 논문 개수~0 까지 반복문 가능
while(!pq.isEmpty() && h <= pq.peek()) { // h 이상인 경우의 논문만 큐에서 빼고 카운팅
pq.poll();
cnt++;
}
if(h <= cnt) { // h가 카운팅보다 작거나 같아지는 시점이 최대값이므로 리턴
return h;
}
}
return 0;
}
// 솔루션 2 (참고 코드)
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for(int i=0; i<citations.length; i++) {
int h = citations.length - i;
if(citations[i] >= h) {
answer = h;
break;
}
}
return answer;
}
}
<솔루션 1 : 내가 푼 것>
- 최대값이 나오는 우선순위큐를 이용했다. h의 최대값을 뽑기 위해 높은->낮은 순으로 체크할 수 있도록 했고 큐에서 제거하면서 카운팅했다.
<솔루션 2 : 참고 코드>
- 구지 큐를 활용 안해도 배열 그대로 해결할 수 있는 문제였다..!
- 배열 오름차순 정렬하고 h는 길이-i 라서 내 코드에서 내림차순으로 for문 돌린 것과 같은 의미.
- 큐에서 없애고 그런 작업 필요 없이 조건에 해당하면 h를 응답으로 내면 됨. (아니 난 왜 큐를쓴거여?ㅠ)
3. 피드백
- 처음에 요구사항을 잘못 이해했다. 풀이에서 h가 아니고 citations[h]을 비교했음.
- 제출 성공이 되어서 잘 푼줄 알았는데 다른 솔루션을 보니 내 코드는 불필요한 로직이 있었음. (구지 내림차순 안해도 되는 것, 큐 안써도 되는 것)
4. 새로 알게된 것
- PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
- 내림차순 정렬 하려면 우선순위큐 초기화 코드 파라미터로 Collections.reverseOrder() 을 주면 코드 단축 가능
728x90
반응형
'알고리즘 > 99클럽 코딩테스트 스터디 2기' 카테고리의 다른 글
99클럽 코테 스터디 11일차 TIL - LV2. 타겟 넘버 (0) | 2024.05.30 |
---|---|
99클럽 코테 스터디 10일차 TIL - LV2. 소수 찾기 (0) | 2024.05.29 |
99클럽 코테 스터디 7일차 TIL - LV2. 가장 큰 수 (0) | 2024.05.26 |
99클럽 코테 스터디 6일차 TIL - 2336. Smallest Number in Infinite Set (LeetCode) (0) | 2024.05.25 |
99클럽 코테 스터디 5일차 TIL - LV2. 더 맵게 (0) | 2024.05.24 |