7-4 H-Index

유태형·2022년 10월 25일

알고리즘 - Java

목록 보기
23/32

출처

해당 게시글은 [Java] 어서와! 자료구조 알고리즘은 처음이지?https://programmers.co.kr/learn/courses/13577를 간략히 요약한 게시글이며 모든 출처는 해당강의에 있습니다




문제



문제 분석

H-Index가 무엇인지 이해하는 것이 중요해 보입니다. 그 외에는 어렵지 않을 것 같습니다




풀이

나의 풀이

이전에 코딩테스트 문제풀이 때 풀어본 경험이 어렴풋이 나서 이해하는데는 어렵지 않았습니다. 다만 잘못 이해하고 있었던 부분이 H-index가 딱 맞아 떨어지지 않을 때 이전 값을 선택해야할 지 그 순간을 선택해야할지 잘 몰랐었습니다.

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        //[0, 1, 3, 5, 6]
        
        Arrays.sort(citations); //순서는 상관 없음
        int answer = 0;
        for(int i=0;i<citations.length;i++){
            int h = citations.length - i; //h편 이상 인용
            if(citations[i] <= h) answer = h; 
        }
        return answer;
    }
}

for 루프를 돌고 나면 마지막으로 유효하였던 h값이 answer에 저장 될 것입니다.

예를들어 [2, 3, 4, 6, 7, 8, 9, 10]을 가정하겠습니다. 5가 딱 맞아 떨어지는 H-Index인 예제입니다.

4가 마지막으로 h번 이상 인용된 논문이 h편 이상 인용되었으므로 4를 반환해야 한다고 생각했었습니다만 틀렸습니다.

H-index는 h번 이상 인용된 논문이 h편 보다 크거나 같을 때 반환한 값이어야 하므로 6입니다.

따라서 if(citations[i] <= h) answer = h 이 아닌 if(citations[i] >= h) return h이 되어야 옳바른 값을 리턴합니다.



강의의 풀이

전체적인 H-index에 대한 이해는 동일하였습니다.

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        //[0, 1, 3, 5, 6]
        
        Arrays.sort(citations); //순서는 상관 없음
        int answer = 0;
        for(int i=0;i<citations.length;i++){
            int h = citations.length - i; //h편 이상 인용
            if(citations[i] >= h) return h; //값이 크거나 같아지면 그 값임
        }
        return answer;
    }
}

크거나 같아질 때의 값이 H-Index입니다




GitHub

https://github.com/ds02168/Study_Algorithm/blob/master/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/%5BJava%5D%20%EC%96%B4%EC%84%9C%EC%99%80%20%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EC%9D%80%20%EC%B2%98%EC%9D%8C%EC%9D%B4%EC%A7%80/%ED%8C%8C%ED%8A%B87.Sort(%EC%A0%95%EB%A0%AC)/HIndex.java

profile
오늘도 내일도 화이팅!

0개의 댓글