문제
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과 1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
[3, 0, 6, 1, 5] | 3 |
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다
문제가 좀.... 이해하기 어지럽네요...
전 쉽게
1. 0~ 최대 논문인 용수 중에서 한 수 n이라 했을 때
2. n회 이하로 인용된 논문 개수,
n회 이상 인용된 논문 개수를 구해서
둘을 n과 비교해주었습니다.
3. 그렇게 둘 다 조건을 만족한다면 H-Index=n이 됩니다.
4. 하지만 여기서 멈추면 안 되고 최대 H-Index를 구하기 위해 계속 반복해주시면 됩니다!
이렇게 이해하는 게 젤 빠른 거 같아요...
자 이제 ㄱㄱ!
먼저 최대 논문 인용수를 구해주고
for(int i=0;i<citations.size();i++){
bignum=max(bignum,citations[i]);
}
이제 0~ bignum를 반복하면서 조건에 맞는 값들이 몇 개 있는지 개수를 세어줍시다.
for(int i=0;i<bignum;i++){
maxcount=0;
for(int j=0;j<citations.size();j++){
if(i<=citations[j]){
maxcount+=1;
}
}
n회 이상 인용된 논문 개수= if i <=citations [j] ==> maxcount
n회 이하로 인용된 논문 개수 ==> allcount - maxcount
(한쪽을 구해서 전체에서 빼버리면 됨)
조건에 맞는지 확인하고 최댓값만 출력!
if(allcount-maxcount<=i and maxcount>=i){// 조건 두개다 맞는지
answer=max(answer,i);
}
}
이해하는데만 오래 걸리고.... 코드는 짧네요 ㅠ
끝!
*all
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
int bignum=0;
int maxcount=0;
int allcount=citations.size();
for(int i=0;i<citations.size();i++){
bignum=max(bignum,citations[i]);
}
for(int i=0;i<bignum;i++){
maxcount=0;
for(int j=0;j<citations.size();j++){
if(i<=citations[j]){
maxcount+=1;
}
}
if(allcount-maxcount<=i and maxcount>=i){
answer=max(answer,i);
}
}
return answer;
}
틀린 점이 있다면 댓 달아주세요!
'코딩테스트!(프로그래머스 & 백준) > 프로그래머스-C++' 카테고리의 다른 글
코딩테스트 -- [1차] 추석 트래픽 - (프로그래머스 / C++) (0) | 2022.06.24 |
---|---|
코딩테스트 -- 배달 (프로그래머스 / c++) (0) | 2022.05.10 |
코딩테스트-- 트럭 (프로그래머스/c++) (0) | 2022.05.09 |
코딩테스트-- 문자열압축(프로그래머스/c++) (0) | 2022.05.09 |
코딩테스트--삼각달팽이(프로그래머스/C++) (0) | 2022.04.14 |
댓글