공부/2024 항해99코딩클럽
99클럽 코테 스터디 8일차 TIL + 정렬/[프로그래머스] H-Index/JAVA 힙풀이
푸딩코딩
2024. 5. 27. 23:33
728x90
반응형
1. 오늘의 학습 키워드
정렬
자바
최대힙
2. 오늘의 학습 문제
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); //최대힙선언
for(int citation : citations)
pq.add(citation);
int h= 0; //h번 이상 인용된 논문 개수를 센다.
// n>=h이다.
while(h < pq.peek() ){ //h가 힙의 루트 노트보다 작은 동안
pq.poll(); // 루트 노트 삭제
h++;
if(pq.size()==0) // 힙이 사이즈가 0일때, 런타임 에러 방지
return h;
}
return h;
}
}
문제에 다르면 n>=h이 된다. 따라서 최대가 되는 h를 구해야하는데, 최대힙을 떠올렸다.
최대힙을 선언하여서 인용횟수를 넣어준다.
h가 pq.peek()인 힙의 루트 노드보다 작을 때 while문을 실행한다. 따라서 인용횟수가 h번 이상인 논문이 h편 이상인 최대 수를 구할 수 있다.
if문은 힙의 사이즈가 0이 되는 경우가 있어서 (테스트케이스9번) 추가해줬다.
https://school.programmers.co.kr/questions/56783
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
런타임에러가 자꾸 뜨길래 위의 글을 참고하여 수정하였다.
3. 오늘의 회고
- 요즘 힙을 많이 사용해서 문제를 풀고 있다.
728x90
반응형