하루에 한 문제

[프로그래머스] H-Index -Java 본문

알고리즘/프로그래머스

[프로그래머스] H-Index -Java

dkwjdi 2020. 12. 16. 16:39

https://programmers.co.kr/learn/courses/30/lessons/42747#

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

import java.util.Arrays;
class Solution {
	    public int solution(int[] citations) {
	        int answer = 0;
	        
	        Arrays.sort(citations);
	        int size=citations.length;
	        
	        for(int i=0; i<size; i++) {
	        	if(citations[i]>=size-i) {
	        		answer=size-i;
	        		break;
	        	}
	        }
	        return answer;
	    }
	}

 

소요시간 : 45분

 

문제를 똑바로 이해 못해서 2번이나 갈아엎었습니다....

 

일단 H-Index란 

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-Index라고 정의되어 있습니다.

 

이 말을 해석해보자면 즉 H-Index의 최댓값은 입력으로 들어온 배열의 크기와 같다는 것을 알 수 있습니다.

 

이를 통해 만든 로직을 살펴보면

1. citations배열을 오름차순으로 정렬해줌 

2. citations[i]>=size-i 이면 answer에는 size-i 값을 넣어주고 끝 

 

이 조건문을 살펴보면 

citations[i] -> 현재 인덱스가 가르키고 있는 배열의 값 -> 이 논문이 인용된 횟수

size-i 지금 상황에서 나올 수 있는 최대의 h의 값 -> 내가 선택한 인덱스를 포함해 배열의 끝까지 남은 인덱스의 갯수 ->인덱스 값이 증가할 수록 h의 값은 하나씩 줄어든다

ex) 배열의 크기가 5라고 쳐보자

[x,x,x,x,x]  이 상황에서 나올 수 있는 가장 큰 h값은 5이다. 배열의 인덱스가 0에서 1로 이동하면

[x,x,x,x] 가 된다. 오름차순으로 정렬을 한 상황이기 때문에 그 앞의 인덱스값은 보지 않는다.

이렇게 되면 이 상황에서 나올 수 있는 가장 큰 h값은 4이다.   

 

 

즉 현재 가르키고 있는 논문이 인용된 횟수가 지금 상황에서 나올 수 있는 최대의 h값보다 크거나 같다는 뜻은 

자기자신을 포함해서 배열의 끝까지 남은 인덱스가 자신이 가지고 있는 수보다 크거나 같다는 뜻이다. 즉 H-Index라는 뜻입니다.

 

 

Comments