1. 문제설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
2. 제한사항
● 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
● 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
3. 입출력 예시
citations return [3,0,6,1,5] 3
4. 나의 풀이
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public int solution(int[] citations)
{
int answer = 0;
//Array의 Sort()로 오름차순 시켜주고, Reverse()로 역순 처리해줘서 내림차순으로 변경.
Array.Sort(citations);
Array.Reverse(citations);
//i는 횟수를 세기 위한 값. i-1은 배열의 방 번호를 알기 위한 값.
for (int i = 1; i <= citations.Length; i++)
{
//배열의 마지막 방의 논문 인용 횟수가 배열의 총 방의 개수보다 클 경우.
if (i == citations.Length && citations[i - 1] > i) return i;
//입출력 예시처럼 논문 인용 횟수와 i가 같을 경우. return i.
//논문 인용 횟수가 i보다 작으면 직전의 논문 인용 횟수를 인정. retunr i-1.
if (citations[i - 1] == i) return i;
else if (citations[i - 1] < i) return i - 1;
}
return answer;
}
★ Key Point ★
- 이 문제의 핵심은 결국 배열의 방 번호 + 1을 리턴하는 것입니다. 2번방이면 n편의 논문 중 3편 이상의 논문이 3회 이상 인용. 4번방이면 n편의 논문 중 5편 이상의 논문이 5회 이상 인용되는 겁니다. 그냥 배열의 논문 인용 횟수(배열의 원소)가 (방 번호 + 1)값보다 크거나 같으면 됩니다.
- 입출력 예시처럼 배열을 내림차순을 해주면 {6,5,3,1,0}이 됩니다. for문을 진행해주면 3번째(i = 3)일 때 해당 논문 인용 횟수((2번방(i-1)의 원소)인 3이 나오게 되어, 값이 같으니 3을 리턴해주게 됩니다.
- 또는 {0,10,1,3,1} 배열이 있을 때 내림차순을 진행하면 {10,3,1,1,0}이 됩니다. for문을 진행해주면 3번째(i = 3)일 때 해당 논문 인용 횟수(2번방(i-1)의 원소)인 1이 나오게 됩니다. 1은 i값인 3보다 작으니 직전에 통과한 2번째(1번방) 논문 인용 횟수인 3이 인정되어 i - 1인 2를 리턴하게 됩니다.
- 마지막 예시로 만약 {6,6,6,6,6}이 주어지면? 배열의 모든 원소 값이 for문의 i보다 큽니다. 즉, 배열을 내림차순을 해줬을 때 마지막 방의 논문 인용 횟수가 배열의 길이보다 크다면 모든 원소 값이 인정되는 것이기 때문에 마지막 방 번호 + 1(배열의 길이)를 리턴해주면 됩니다.
'C# > 프로그래머스 코딩 문제 풀이' 카테고리의 다른 글
[프로그래머스 C#] Lv.2 행렬의 곱셈 (0) | 2024.03.12 |
---|---|
[프로그래머스 C#] Lv.2 점 찍기 (0) | 2024.03.10 |
[프로그래머스 C#] Lv.2 숫자 변환하기 (2) | 2024.03.07 |
[프로그래머스 C#] Lv.2 주식가격 (0) | 2024.03.06 |
[프로그래머스 C#] Lv.2 영어 끝말잇기 (0) | 2024.03.05 |