본문 바로가기

프로그래머스

6/4[문제풀이] 프로그래머스 Lv2 H-Index

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

 

문제를 읽고 또 읽어도 당최 무슨 말인지 이해를 하지 못해 한참을 구글링 했던 것 같다. 내가 이해력이 딸려서 이해를 못하는 것인지 설명이 부족한 것인지 한 동안 구글링을 한지 이해를 해서 문제를 풀게 되었다. 솔직히 개념만 이해한다면 그리 어렵지 않은 문제라고 생각이 든다. 하지만 이해하는데 어려웠다는 것... 내 문장 이해력에 의문(?)이 생겼다.

 

 

H-Index 산출 방법을 한 번 정리 하여야 할 것 같다.

예를 들어 연구자의 발표 논문들과과 인용 횟수들이 존재한다고 생각할 때

 

Number 논문 명 인용횟수
0 논문 A 53
1 논문 B 26
2 논문 C 20
3 논문 D 13
4 논문 E 10
5 논문 F 4
6 논문 G 2

 

우선 논문명을 인용횟수인용 횟수 기준으로 내림차순 정렬을 한 후 인용 횟수가 높은 순서대로 Number를 부여한다.

그리고 Number 보다 인용횟수가 낮아지거나 같은 경우를 보아야 하는 데 이때의 Number가 H-Index가 되는 것이다.

이 값의 의미는 해당 저자가 발표한 논문 중 5개의 논문이 적어도 각 5번 인용되었다는 의미이다.

 

Case 1) 문제에서의 입출력 예시를 들더라도 H-Index가 3이 되는 설명이 이해가 비로소 된다.

 

 Number 인용횟수
0 6
1 5
2 3
3 1
4 0

 Case2) 아래와 같은 경우도 있는데 이 같은 경우 H-Index 값이 4가 되게 된다.

Number 인용횟수
0 9
1 9
2 8
3 7

 

앞서 부연 설명이 너무 길었다. 문제풀이를 보자면...

 

[문제풀이]

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(citations) {
    
    citations.sort((a,b)=>b-a);
    
    for(let x = 0; x < citations.length; x++){
        
        if(x >= citations[x]) return x;
        
    }
    
    return citations.length;
    
}
cs

 

이해를 하기 위해서 많은 시간이 들었지만 개념을 이해하고 나니 막상 구현하는 코드는 몇 줄 되지 않았다. 

우선 내림차순으로 변수 값을 정렬해주고 해당 변수 배열의 길이만큼 for문을 돌려 인용 횟수[x] 값(citations [x])이 논문의 수[x]와 같거나 작을 때 x 값을 return 해주는 식으로 코드를 구성했고 11줄은 return 값 같은 경우는 citations의 변수 배열이 x값보다 큰 경우 즉 [10,9,9] 같은 경우라던지 [2,2] 같은 경우를 생각해 넣은 코드이다. 이 경우를 생각하지 못했다가 통과하지 못해 추가적으로 넣었다.