나 JAVA 봐라

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

코딩테스트/정렬

[프로그래머스] H-Index

cool_code 2024. 7. 9. 17:37

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제를 읽어보면, h의 최댓값을 찾는 문제이다. 

 

또한 h가 되려면 아래 두가지 조건을 모두 만족해야한다. 

1. h <= h번 이상 인용된 논문의 수

2. h >= h번 이하 인용된 논문의 수

 

h값을 탐색할 때, 가장 큰 인용횟수를 기준으로 시작할 수 있다. (-> 그 이상의 수는 애초에 조건을 만족할 수 없기 때문에)

따라서 배열을 정렬한 후, 가장 큰 수부터 반복하여 탐색한다. 

 

이 때, 큰 수부터 반복하다가 조건 2가지를 모두 만족하는 h값을 찾았다면, 큰 수 부터 탐색했기에 가장 큰 값이므로 바로 return하면 된다. 

 

++ 그리고 정렬했기 때문에, count++을 하다가 더이상 count++ 할 수 있는 원소가 없다면 break를 통해서 끝까지 탐색하지 않도록 한다. 

 

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        
        int n = citations.length;
        Arrays.sort(citations);
        
        for (int i = citations[citations.length-1]; i >= 0; i--){
            
            int h = i; 
            int count = 0;
            
            // h번 이상 인용된 논문의 수 count하기
            for (int j = citations.length-1; j >=0; j--){
                if(h <= citations[j]) {
                    count++;
                }else{
                    break; // 탐색 끗. 
                }
            }
            
            if (h <= count && h >= n-count){
                return h;
            }
            
        }
        
        return 0;
    }
}