TIL (2022.02.13)
➕ 오늘 푼 문제
프로그래머스 - H-Index
➕ 아이디어
- 인용 횟수에 따라
citations
를 오름차순으로 정렬한다.
- 반복문을 돌며 해당 논문의 인용 횟수(
quotation_count
)와 그 이상 인용된 논문의 개수(thesis_count
)를 구한다.
quotation_count
: 현재 citations
의 값
thesis_count
: citations
에서 현재 값보다 큰 값을 가진 원소의 개수
- 둘 중에 작은 값을 h 값으로 하여, h 값 중 최대 값을 구한다.
- h-index는 h번 이상 인용된 논문이 h 개 이상인 최대 h이다.
- 예를 들어 3번 이상 인용된 논문이 5개 이상 있다면, 3번 이상 인용된 논문은 3개 이상 있다고 볼 수 있다. 역으로 3번 이상 인용된 논문이 2개 이상 있다면, 2번 이상 인용된 논문은 2개 이상 있다고 볼 수 있다.
- 따라서 두 값 중 작은 값을 현재의 h 값으로 볼 수 있다.
➕ Java 코드
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int n = citations.length;
Arrays.sort(citations);
for(int i=0; i<n; i++){
int quotationCount = citations[i];
int thesisCount = n-i;
int h = Math.min(quotationCount, thesisCount);
answer = Math.max(answer, h);
}
return answer;
}
}
➕ Python 코드
def solution(citations):
answer = 0
n = len(citations)
citations.sort()
for i in range(n):
quotation_count = citations[i]
thesis_count = n-i
h = min(quotation_count, thesis_count)
answer = max(h, answer)
return answer
➕ 궁금한 내용 및 소감
- 정렬 문제라는 것을 모르고 풀었다면, 과연 혼자 힘으로 풀 수 있었을 지 조금 의심이 든다 ㅎㅎ하지만 다행히 어렵지 않게 아이디어를 도출할 수 있었다. 유형을 모르더라도 풀 수 있게 익숙해져야겠다!
➕ 참고 문헌