1. 프로그래머스 H-index 문제
2. 컴퓨팅적 스킬
- 정렬문제인 만큼
#include <algorithm> 헤더에 있는 sort를 이용하면 됩니다.
- sort는 기본적으로 오름차순 정렬로 되어있습니다. 별 다른 옵션을 주지 않아도 오름차순 정렬을 하게 됩니다. 그 외
내림차순정렬
을 이용 할 때는 다음과 같은 두가지 방법을 사용할 수 있습니다.
1.compare함수를 이용한 내림차순 방법
1 | bool compare(int v1,int v2){ |
- greater
() 함수 옵션을 사용한 내림차순 정렬
1 | sort(citations.begin(),citations.end(),greater<int>()); |
3. 컴퓨팅적 사고
H-index
의 개념을 알고가셔야 합니다. 논문 n편중 h번이상 인용된 논문이 h편이상이고 h번 이하 인용되었다면 h가 H-index가 됩니다.- 첫번째
테스트 케이스인 [3,0,6,1,5]
로 예를 들어 설명하겠습니다.
오름차순 정렬 전
DATA | INDEX |
---|---|
3 | 0 |
0 | 1 |
6 | 2 |
1 | 3 |
5 | 4 |
오름차순 정렬 후
DATA | INDEX |
---|---|
0 | 0 |
1 | 1 |
3 | 2 |
5 | 3 |
6 | 4 |
4.
- 정렬전과 정렬후의 과정입니다.
H-index
라는것을 맨처음에 모든 값의 합을 나눈 평균의 값이 H-Index라고 생각을 하여 아주 단순하게 생각했습니다. 당연히 틀린것이였습니다. - index를 가지고 생각했어야 했는데, 값을 가지고 생각을 하였습니다. 위의 테스트케이스는 총 5편의 논문이 쓰여졌으며
인덱스값이 DATA의 값보다 커지는 시점
index > data
을 찾아야 합니다. 그 시점이 H-index지점입니다.데이터값은 뒤에서부터 비교하고 인덱스값은 앞에서 비교하게 됩니다. 따라서 citations.size()-i-1의 형식이 나오게됩니다. -1을 해주는이유는 for문에서는citiation-1지점까지만 순회하기때문에 이에 따라 -1을 붙여준것입니다. 어디서부터 시작하고 어디서부터 끝내는지에 대해서 한번더 고민해보시면 되겠습니다. - Data = 5, Index = 3의 지점이 H-index에 해당하는값 입니다.
index>data
의 지점에 index는 3의 값을 반환하게 됩니다. 이 값은 결국 h-index의 값을 나타내는것이며총 5편의 논문과 3회이상의 인용된 논문 3편, 3회 이하 인용된 논문 2편
이 되게 됩니다. 따라서 h-index의 값을 정확하게 도출해냈다고 할 수 있습니다. - 문제들을 너무 어렵게 생각하여 풀었는데,
index
에 대해 유연하게 접근하면 쉽게 풀 수 있었던 문제라고 생각합니다.
5. 풀이
5.1. 1. 정렬 풀이
1 |
|