와진짜
너무어려웠다,,,,,,,
난정말똥멍청이야
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
즉 h이상 인용된 논문이 h편 "이상" 일 때 hindex가 정해진다!
뭔가 더 좋은방법이 있을것같긴한데
나는 그냥 전부다 탐색하면서 해결했다 (냅다 반복문사용)
그래도 반복문이 전부다 한단계씩만 있어서,,, 이중반복문은 아니라 다행이다.
1. 배열 citations를 정렬한다 (나는 오름차순으로 정렬했다)
2. hindex의 최대값은 citations의 길이이다 (== 과학자가 발표한 논문의 개수)
3. 배열의 index는, 제일 오른쪽부터 시작! (즉 size-1, 인용수가 가장 큰것부터 확인하려는것)
4. citations[index] > hindex의 경우, 해당 인용수가 hindex가 될 수 없으므로 해당경우에는 index를 하나씩 줄여준다.
-> 지금까지의 상황은
이런느낌이 된다!!
(혹은 h-index == citations[index])인 상황이 된다.
4-a. 만약, index가 0이 될때까지 citations[index] > hindex인경우,
인용횟수의 최소값이 전체 논문개수보다 많은상황이다
즉 그냥 hindex가 전체 논문개수이므로 여기서 hindex가 정해진다.
5. hindex >= citations[index]인 상황에서 반복문을 돈다.
a. 지금 상황을 기준으로 논문횟수가 hindex 이상인 논문개수를 구한다 (larger)
b. larger가 hindex "이상"인 경우, hindex가 정해진것이므로, 반복을 멈춘다
c. 아닌경우, hindex를 1줄인다 (hindex 최대값부터 시작이므로)
이때! h-index가 citations[index]보다 작아지면, index로 1줄여준다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(vector<int> citations) {
int answer = 0;
sort(citations.begin(), citations.end());
// 오름차순 정렬
//cout << citations[0] << endl;
bool flag = true;
int allsize = citations.size();
int index = allsize-1; // 제일 인용수가 많은 논문의 index
int hindex = allsize; // hindex의 최대값 (논문 개수)
//cout << allsize << endl;
//cout << hindex << endl;
// 논문수가 allsize편이므로 hindex는 촤대 allsize임
// 즉 제일 끝에있는 논문의 인용수가 allsize을 초과하면, allsize이하인 index부터 시작하는게 맞음
while(hindex < citations[index]){
if(index < 0){
// 이하로 내려가는 경우
return hindex;
break;
}
index--;
}
// 중복된 개수 (1,1,1,1,1,1....) 가 있을 때 중간에 멈추는 상황을 방지할필요가 있어보임
// 시작상황
// hindex >= citations[index]
cout << index << endl;
while(flag){
int larger = allsize - index;
if(citations[index] != hindex){
larger -=1;
}
//cout << "allsze, index, larger "<<allsize <<", "<<index << " , "<< larger << endl;
if(larger >= hindex){
flag = false;
break;
}else{
hindex--;
if(hindex > citations[index-1] && hindex <= citations[index]){
index--;
}
}
}
answer = hindex;
return answer;
}
뭔가 다른사람 코드를 보면 좀 더 단순하고 간단하게 해결한것같은데
생각하기 귀찮으니까 그냥 넘겨야겠다,,,,
챌린저문제도,,,,
일요일은넘힘들어서 스터디고뭐고 귀찮다,,
암튼
해결됐으니까 된거겠지모..
'코테준비 > 하루한개도전~' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL : 완전탐색 - 소수찾기 (2) | 2024.05.29 |
---|---|
99클럽 코테 스터디 5일차 TIL : 완전탐색 - 카펫 (0) | 2024.05.28 |
99클럽 코테 스터디 3일차 TIL : 이중우선순위큐 (챌린저) (0) | 2024.05.25 |
99클럽 코테 스터디 3일차 TIL : smallest-number-in-infinite-set (미들러) (0) | 2024.05.25 |
99클럽 코테 스터디 2일차 TIL : heap - 디스크 컨트롤러 (챌린저) (0) | 2024.05.24 |