-
[프로그래머스] 정렬 - H-index알고리즘 공부/문제 풀이 2020. 8. 6. 23:57
문제를 처음에 보고 말이 어렵다고 생각했다.
하지만, 막상 구현해보니 간단하게 코드를 짤 수 있었다.
우선 h-index의 조건은 두 가지이다.
1. h개 이상의 논문에 대해서
2. h번 이상의 인용이 이루어져야한다.
첫번째 조건은 index를 이용하여 충족시키도록 하였다.
주어진 배열을 오름차순으로 정렬한 후, 큰 수부터 접근하였다.
1,3,4,5,7 을 예시로 들어보자
초기 상태는 1,3,4,5,7,*라고 생각하자. *은 현재 가리키고 있는 인덱스라고 생각하면 된다.
당연히 h-index는 0이 될 것이다.
나는 h-index를 먼저 증가시키고 위의 두가지 조건을 만족시키지 않으면 다시 감소시킨다음 return하도록 코드를 짰다
따라서 h-index는 1이되고 가리키는 값은 7이 되어 1,3,4,5,7* 이 상태가 될것이다.
후에 7과 h-index를 비교하여 h-index < 7 을 만족한다면, h-index를 또 증가시키고 위의 과정을 반복해준다.
h-index=2일 때 1,3,4,5*,7 -> 2<5를 만족하므로 또 한번 반복
h-index=3일 때 1,3,4*,5,7 조건 만족하므로 다시 반복
h-index=4일 때 1,3*4,5,7 조건 만족하지 않으므로 h-index가 하나 줄은 3일 때가 최대 h값이 된다.
따라서, h-index는 3이다.
이 과정을 코드로 구현하면 아래와 같다.
public class sort3 { static int solution(int[] citations) { int answer = 0; //오름차순 정렬 Arrays.sort(citations); //모든 논문이 인용된 횟수가 0일 경우 h-index는 0 if(citations[citations.length-1]==0) return answer; //큰 수부터 내려오며 answer 증가 시킴 for(int i=citations.length-1; 0<=i ;i--) { answer++; if(answer<=citations[i]) continue; else { answer--; break; } } return answer; } }
단 모든 논문이 모두 인용되지 않은 경우 예외 처리를 해 주어야 한다.
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 스택/큐 - 기능개발 (1) 2020.08.10 [프로그래머스] 스택/큐 - 주식가격 (1) 2020.08.10 [프로그래머스] 정렬 - 가장 큰 수 (1) 2020.08.06 [프로그래머스] 정렬 - k 번째 수 (1) 2020.08.06 [2019 카카오 겨울인턴] 호텔방 (JAVA) (0) 2020.05.08