반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <string> #include <vector> #include <algorithm> using namespace std; int solution(vector<int> citations) { int size = citations.size(); int zeroCount = 0; for(int i = 0; i < size; i++) { if(citations[i] == 0) zeroCount++; } if(size == zeroCount) return 0; sort(citations.begin(), citations.end()); for(int i = citations[size - 1]; i >= 0; i--) { int inclu = 0; for(int j = 0; j < size; j++) { if(i <= citations[j]) inclu++; } if(i <= inclu && size - inclu <= i) return i; } return 0; } | cs |
문제에는 나와있지 않지만 최종적으로 값을 내는 것은 H-Index의 최대값을 나타내야한다. 그 이유는 자세하게 모르겠지만 테스트케이스 11에서 최대값을 나타나게 하지 않으면 틀린다고 나온다.
먼저 문제는 위에 설명되어있는 대로이다. 하지만 그냥 읽으면 조금 헷갈리게 설명이 되어있다. h번 이상 인용된 논문이 h편이라고 설명이 되어있으니 조건문에서 판별할때 자꾸 생각하게 된다.이 문제를 풀때 이 조건을 생각하기 위해서 inclu라는 변수를 하나뒀다. 그 이유는 인용된 논문의 개수를 세기 위해서이다.
또한 문제를 풀기 전에 배열을 한번 sort해줬다. 그 이유는 H-Index의 최대값을 찾기 위해서이다. 또한 배열에 나온 논문이 인용된 개수를 이용하기 위해서이다. 문제를 보면 논문이 인용된 최대의 개수는 10000번이라고 나오는데 굳이 이 최대 개수를 이용하지 않고 현재 문제에서 주어진 것들로만 이용해서 문제를 풀면 좀 더 효율적이라고 생각했기 때문이다.
그 이후에 반복문을 실행하면서 논문이 인용된 개수를 구해주고 그 값을 if문에서 i번 이상 인용된 논문 inclu번과 비교하고 나머지 논문 size - inclu와 i번을 비교해서 그 값이 참이되면 그때의 i값 즉, h-index를 리턴해주면 된다.