Programmers > Sort > #21 H-Index [JAVA]

 

H-Index

 

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

 

 

 

 

 

 

1. 문제 설명

 

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

 

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

 

 

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

 

 

 

2. 나의 코드

 

- 해당 요소의 값보다 해당 요소이하의 갯수(Index)가 커야함

- 내림차순으로 정렬 후에, 배열의 요소와 Index를 하나씩 비교해본다.

- 만약 Index > element 가 된다면, answer = index가 되고 빠져 나온다.

- H-Index 값과 배열의 길이가 같은 경우, 예를 들어 [3, 2] 인 경우 H-Index는 2이지만 배열의 길이가 짧아서

Index가 3일때 배교를 제대로 하지 못한다. 따라서 for문에서 arr.size()+1을 해서 비교를 할 수 있도록 한다.

 

 

 

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        
        //array descending sort
        ArrayList<Integer> arr = new ArrayList<>();
        for(int k =0; k < citations.length; k++){
            arr.add(citations[k]);
        }
        
        Collections.sort(arr);
        Collections.reverse(arr);
        
        for(int i = 0; i < arr.size()+1 ;i++){
            if(i == arr.size()){
                answer = i;
            }
            else if(arr.get(i) <= i){
                answer = i;
                break;
            }
        }
        return answer;
    }
}

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

2)

- 이 코드는 테스트 케이스에서는 백프로 잘되는데, 실제 실행 해보면 하나도 안되는 코드이다.

- 진짜 이거 왜 안되는지 몰랐는데, 10시간 고민하고 알게 되었다.

- i+1(요소의 실재 갯수)을 배열요소와 비교해서 element < index 를 충족하면, answer = element 를 리턴하도록 하는 코드.

- [10] 인 경우, H-Index는 1이다. [5,5,5,5] 인 경우 H-Index는 0이 아니라 4이다. 하지만 모두 0을 리턴한다. 

- index를 기준으로 H-Index가 판별된다.

 

import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        
        //array descending sort
        ArrayList<Integer> arr = new ArrayList<>();
        for(int k =0; k < citations.length; k++){
            arr.add(citations[k]);
        }
        
        Collections.sort(arr);
        Collections.reverse(arr);
        
        for(int i = 0; i < arr.size() ;i++){
             if(arr.get(i) <= i+1){
                answer = arr.get(i);
                break;
            }
        }
        return answer;
    }
}

 

3. 다른사람 코드

 

- 굳이 descending sort를 하지 않아도, ascending sort로 더 간단하게 정렬할 수 있다.

- 끝 index와 첫 element를 비교하면서 둘 중 작은 수를 추출한다.

- 추출 된 수를 result에 넣고, 다음에 추출된 수와 비교하여 그중 큰수를 다시 result에 넣는다.

- 이를 반복한다. 

- 전체 배열의 갯수와 요소의 값과 일치하는 것을 찾는 과정.

 

e: [0,1,3,5,6]

i: 5 4 3 2 1

 

=> 어떻게 이런 생각을 했는지 정말 대단하다...

 

import java.util.Arrays;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Arrays.sort(citations);
        for(int i=0; i<citations.length; i++){
            int smaller = Math.min(citations[i], citations.length-i);
            answer = Math.max(answer, smaller);
        }
        return answer;
    }
}

 

3. 보완

 

문제 풀때, 집중!

 

[출처] https://dreamhollic.tistory.com/entry/Programmers-21-HIndex-JAVA?category=676734

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
918 1932 > DP > #37 정수 삼각형 졸리운_곰 2020.04.12 75
917 Programmers > 2018 서머코딩 > #36 예산 졸리운_곰 2020.04.12 66
916 9084 > DP> #35 동전 졸리운_곰 2020.04.07 102
915 BaekJoon _ 백준 1149 > DP> #34 RGB 거리 졸리운_곰 2020.04.02 93
914 BaekJoon _ 백준 1026 > 탐색> #33 보물 졸리운_곰 2020.04.02 90
913 Programmers > 연습문제 > #32 N-Queen 졸리운_곰 2020.04.01 61
912 Programmers > 연습문제 > #31 2 x n 타일링 졸리운_곰 2020.04.01 70
911 List of freely available programming books 졸리운_곰 2020.03.31 184
910 How to do pointers in Visual Basic file 졸리운_곰 2020.03.26 76
909 Linked List implementation in Visual Basic 졸리운_곰 2020.03.24 50
908 Programmers > 스택/큐(Stack/Queue) > #30 기능개발 졸리운_곰 2020.03.23 65
907 Programmers > #28 winter recruit > #2 [JAVA] 졸리운_곰 2020.03.23 47
906 Programmers > 깊이/너비 우선 탐색(DFS/BFS) > #27 타겟 넘버 [JAVA] 졸리운_곰 2020.03.09 65
905 Programmers > 완전탐색 > #26 소수찾기(level 2) [JAVA] 졸리운_곰 2020.03.09 69
904 Programmers > #25 winter recruit > #1 [JAVA] 졸리운_곰 2020.03.08 47
903 Programmers > Level 1 > #24 소수찾기 [Python] 졸리운_곰 2020.03.08 66
902 Programmes > #23 문자열 내 마음대로 정렬하기 [Python] 졸리운_곰 2020.03.08 61
901 Programmers > Hash > #22 위장 [JAVA] 졸리운_곰 2020.03.07 58
» Programmers > Sort > #21 H-Index [JAVA] 졸리운_곰 2020.03.07 61
899 [Programmers] #20 라면공장 [JAVA] 졸리운_곰 2020.03.06 83
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED