20240222_H-Index(프로그래머스)

2024. 2. 26. 09:27IT/TIL

오늘의 TIL은 대충 만든 자판이라는 프로그래머스의 문제에 대한 내용이다.

 

문제 링크

 

https://school.programmers.co.kr/learn/courses/30/lessons/42747

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

H-Index는 과학자의 생산성과 영향력을 나타내는 지표이다.

어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 한다.

 

H-Index는 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고

나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다.

 

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때,

이 과학자의 H-Index를 return 하시오.

 

 

제한 조건

과학자가 발표한 논문의 수는 1편 이상 1,000편 이하이다.

논문별 인용 횟수는 0회 이상 10,000회 이하이다.

 

 

해결 방안

1. 주어진 citations의 배열을 내림차순으로 정렬하여 인용횟수를 큰 수부터 확인할 수 있게 한다.

2. citations의 길이만큼 반복하면서 해당 원소(citations[i])가 인용횟수(i + 1)과 같거나 크면 

    그 값을 H-Index로 변경한다.

 

 

통과한 답안

더보기
using System;

public class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Array.Sort(citations);
        Array.Reverse(citations);

        for (int i = 0; i < citations.Length; i++)
        {
            if (citations[i] >= i + 1)
            {
                answer = i + 1;
            }
            else
            {
                break;
            }
        }
        return answer;
    }
}

 

 

citations 배열을 내림차순으로 정리

Array.Sort(citations);
Array.Reverse(citations);

 

배열의 정렬 기능을 활용하여 내림차순으로 정리

 

 

H-Index값 업데이트

for (int i = 0; i < citations.Length; i++)
{
    if (citations[i] >= i + 1)
    {
        answer = i + 1;
    }
    else
    {
        break;
    }
}

 

for 문을 citations의 길이만큼 돌면서

해당 원소가 i + 1(배열이므로 +1)과 같거나 크면 그 값을 H-Index로 업데이트

 

 

오늘은 이전에는 문제를 보고 난이도가 높다고 생각하고 넘어갔었던 H-Index라는 문제를 풀었는데,

실제로 문제를 풀이해보니 생각보다 간단하게 풀 수 있었던 문제였다.

 

이 H-Index라는 단어가 문제를 만들기 위해 만든 단어가 아니라 실제로 있는 단어로,

학술논문과 관련되어 있는 단어라서 반가운 마음으로 TIL로 기록하게되었다.