Coding Test/Programmers

[Lv.2] H-Index [프로그래머스_코딩테스트] [정렬] [25분]

whawoo 2025. 7. 4. 18:27
반응형

🔍 문제 요약

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;
}

🔄 정리

문제를 정확히 이해하는 거가 정말 핵심이라고 생각되는 문제였다. 틀려도 왜 틀린지도 몰랐으니깐.. 정의 자체가 혼란스럽게 적혀져 있는 문제긴 했지만.. 독해가 안 좋았던 건가란 별 생각이 다 들었던 문제..

반응형