문제를 읽고 또 읽어도 당최 무슨 말인지 이해를 하지 못해 한참을 구글링 했던 것 같다. 내가 이해력이 딸려서 이해를 못하는 것인지 설명이 부족한 것인지 한 동안 구글링을 한지 이해를 해서 문제를 풀게 되었다. 솔직히 개념만 이해한다면 그리 어렵지 않은 문제라고 생각이 든다. 하지만 이해하는데 어려웠다는 것... 내 문장 이해력에 의문(?)이 생겼다.
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] 같은 경우를 생각해 넣은 코드이다. 이 경우를 생각하지 못했다가 통과하지 못해 추가적으로 넣었다.
'프로그래머스' 카테고리의 다른 글
6/9[문제풀이] 프로그래머스 Lv2 문자열 압축 (0) | 2021.06.09 |
---|---|
6/8[문제풀이] 프로그래머스 Lv2 스킬트리 (0) | 2021.06.08 |
6/3[문제풀이] 프로그래머스 Lv2 예상 대진표 (0) | 2021.06.03 |
6/1[문제풀이] 프로그래머스 Lv2 프린터 (0) | 2021.06.01 |
5/31[문제풀이] 프로그래머스 Lv2 기능개발 (0) | 2021.05.31 |