본문 바로가기
코테준비/하루한개도전~

99클럽 코테 스터디 9일차 TIL : H-index

by 움바둠바 2024. 8. 2.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42747#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

https://usowelcome.tistory.com/11

 

99클럽 코테 스터디 4일차 TIL : 정렬 - H-index

와진짜너무어려웠다,,,,,,,난정말똥멍청이야 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index

usowelcome.tistory.com

이 문제도 저번기수에서 풀었던 문제였다.

근데,,, 이번에도 좀 돌아돌아 풀었다...ㅎㅎ.....


계속 테스트9에서 틀려서 한참을 고민했다.

이유는 논문개수 < 최소인용횟수 인 상황을 고려하지 않았기 때문이었다.

 

나는 반복문 2개를 사용해서,

outer반복은 index를 하나씩 줄이고 (i)

inner반복은 h-index를 하나씩 줄여서 (citations[i] ~ citations[i-1])

모든 경우의 수를 반복했다.

 

이 때 h-index의 값은 인용횟수 배열의 중간값 이상이 될수는 없기때문에 (h이상 조건을 절대 만족하지 못함)

중간부터 반복을 시작했다.

 

논문개수 < 최소인용횟수 상황의 경우, 결과가 h-index = 논문개수 로 고정된다.

[10, 11, 12] 생각해보자

그래서 citations 정렬 후, 이런 상황에 대해 미리 처리를 해주었다.

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <algorithm>

using namespace std;

int solution(vector<int> citations) {
    int answer = 0;
    int n = citations.size();
    
    sort(citations.begin(), citations.end());
    if(n < citations[0]){
        // 논문 개수보다 최소 인용개수가 많은경우
        // 무조건 n으로 고정!
        return n;
    }
    
    int hindex = 0;
    for(int i = (n+1)/2; i > 0; i--){
        //cout << i << endl;
        for(int j = citations[i]; j>=citations[i-1]; j--){
            //cout << i << ", "<<j<<endl;
            if((n-i) >= j){
                hindex = max(j, hindex);
                //cout << "Test : "<<hindex<<endl;
                break;
            }
        }
    }
    
    return hindex;
}

난 아직 부족하구나아ㅏ,,

728x90