코딩테스트 연습 - H-Index | 프로그래머스 스쿨
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
[문제]
H-Index는 과학자의 생산성과 영향력을 나타내는 지표
어느 과학자의 H_Index를 나타내는 값인 h를 구해야 한다.
H_index 구하는 방법
논문 n편 중, h번 이상 인용된 논문이 h편 이상이고
나머지 논문이 h번 이하 인용되었다.
이때 h의 최댓값이 H_index이다.
[입력]
- 논문의 인용 횟수 배열 citations
[출력]
- 과학자의 H_index 반환
[제한사항]
- 1편 <= 발표한 논문의 수 <= 1,000편
- 0회 <= 논문별 인용 횟수 <= 10,000회
[입출력 예]
citations = [3, 0, 6, 1, 5]]
논문의 수 = 5
3번 이상 인용된 논문이 3편 (h번 이상 인용된 논문이 h편 이상)
나머지 논문은 3번 이하 인용되었다. (나머지 논문은 h번 이하 인용)
H-Index = 3
[풀이]
1
i번째 논문이 citations[i]번 이상 인용된 논문이 citations[i]편이고
나머지 논문은 citations[i]번 이하 인용되었는지 확인.
이 과정을 citations 길이만큼 반복
조건을 만족하면 H-index를 반환
코드1 - 오답
using System;
public class Solution {
public int solution(int[] citations)
{
int count1 = 0;
int count2 = 0;
int max = -1;
for(int i = 0; i < citations.Length; i++)
{
for(int j = 0; j < citations.Length; j++)
{
if(citations[j] >= citations[i])
count1++;
else
count2++;
}
if(count1 >= citations[i] && count2 <= citations[i])
max = citations[i] > max ? citations[i] : max;
count1 = 0;
count2 = 0;
}
return max;
}
}
뭐 때문에 틀렸는지 전혀 감이 오지 않아서 llm을 사용해서 내 코드에 대한 피드백을 받아봤다.
이 문제에서 h는 citations[i]이어야 한다는 말은 없다.
나는 h가 citations[i]라고 보고 문제를 풀었다. h의 후보군을 citations 원소값으로 줄이니 오답이 나왔던 것이다.
h는 범위가 딱히 정해져 있지 않으므로, h는 0부터 검사하면 된다.
코드 2 - 정답
using System;
public class Solution {
public int solution(int[] citations)
{
int count1 = 0;
int count2 = 0;
int max = 0;
for(int h = 0; h <= citations.Length; h++)
{
for(int j = 0; j < citations.Length; j++)
{
if(citations[j] >= h)
count1++;
if(citations[j] <= h)
count2++;
}
if(count1 >= h && count2 <= h)
{
max = h > max ? h : max;
}
count1 = 0;
count2 = 0;
}
return max;
}
}
'자료구조, 코딩테스트' 카테고리의 다른 글
| [코딩테스트] LeetCode - Majority Element (성공) (0) | 2026.05.11 |
|---|