🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
논문 인용수들의 배열 citations가 주어질 때 h번 이상의 인용수를 가지는 논문들이 h개 이상인 경우에 최대의 h를 구하는 문제.
🧠 나의 접근 방식과 시행착오
어이가 없이 계속 틀렸다. gpt에게 물어보고 왜 틀린건지 이해가 안된다고 물어보기도 했다... 문제를 아예 다르게 이해했으니 풀릴리가 없지.. 해당 내용에 대해서는 아래 풀이 코드를 적으면서 적어보려고 한다. 일단 생각했던 방법은 인용수를 일단 큰 수 부터 작은 수 순으로 내림차순을 하면서 i + 1이 인용수보다 크거나 같은 순간의 인용수를 반환하는 것을 생각했다. (반복 다 돌아도 안되면 그냥 마지막 인용수가 1인 경우만 반환하고 그 외엔 0이라고 판단함) 다만 문제를 일부러 함정처럼 낸 건지 H-Index의 정의가 명확하지 않았다는 거가 함정...
public int solution(int[] citations)
{
Array.Sort(citations);
Array.Reverse(citations);
for (int i = 0; i < citations.Length; i++)
{
int h = citations[i];
if (i + 1 >= h)
{
return h;
}
}
return citations.Length >= citations[citations.Length - 1] ? citations[citations.Length - 1] : 0;
}
✅ 풀이 코드
크게 구조가 다르지 않다. 사실 그냥 코드만 봤을 땐 뭐가 차이지라는 생각을 했을 듯 하다. 지금 보니 H-Index가 말그대로 Index였다.. 난 인용수라고 생각을 했던 것이고.. 사실 문제 링크에서 설명글을 보면 h 라는 것을 들면서 설명을 하는데 그걸 동음이의어마냥 두 곳에서 동일하게 쓰면서 H-Index로 마무리를 짓는다. 아래 문제에 적어진 것을 그대로 가져왔다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
자 위의 정의만 봤을 때 h가 특정 논문의 인용 수의 값을 말할 때에도 쓰이고, 논문의 개수를 말할 때에도 동일하게 쓰이고 있다. 그러면서 h의 최댓값이 H-Index 라고 그냥 문장을 마무리 짓고 있다. 문제를 어렵게 내려고 한건지 지금 보면 이상하게 H-Index에 대해 설명하기 위한 위키백과 링크가 걸려있는 게 이런 걸 보완하고 싶었는지도 모르겠다. 그래서 결국 풀이는 아래와 같다. 크게 코드 자체가 어려운 구조나 그런 것도 아니다..
public int solution(int[] citations)
{
Array.Sort(citations);
Array.Reverse(citations);
int h = 0;
for (int i = 0; i < citations.Length; i++)
{
if (citations[i] >= i + 1)
{
h = i + 1;
}
else
{
break;
}
}
return h;
}
🔄 정리
문제를 정확히 이해하는 거가 정말 핵심이라고 생각되는 문제였다. 틀려도 왜 틀린지도 몰랐으니깐.. 정의 자체가 혼란스럽게 적혀져 있는 문제긴 했지만.. 독해가 안 좋았던 건가란 별 생각이 다 들었던 문제..
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.1] 약수의 합 [프로그래머스_코딩테스트] [수학] [10분] (0) | 2025.07.06 |
---|---|
[Lv.1] 제일 작은 수 제거하기 [프로그래머스_코딩테스트] [배열] [10분] (0) | 2025.07.05 |
[Lv.2] 최솟값 만들기 [프로그래머스_코딩테스트] [정렬, 그리디] [25분] (0) | 2025.07.04 |
[Lv.0] 숨어있는 숫자의 덧셈 (1) [프로그래머스_코딩테스트] [문자열, 수학] [10분] (1) | 2025.07.04 |
[Lv.0] k의 개수 [프로그래머스_코딩테스트] [구현, 수학] [10분] (0) | 2025.07.04 |