[99클럽 코테 스터디 32일차 TIL] 프로그래머스 H-Index

말하는 감자·2024년 11월 28일
0
post-thumbnail

99클럽 코테 스터디 32일차 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 정렬

📌 공부한 내용

📍 오늘의 문제

📍 작성 코드

import java.util.Arrays;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Arrays.sort(citations);
        
        for(int i=0; i<citations.length; i++) {
            int h = citations.length - i;
            if(citations[i] >= h) {
                answer = h;
                break;
            }
        }
        
        return answer;
    }
}

📌 오늘의 회고

문제가 이해가지 않아 울고싶었던 감자...

(문제를 잘못 이해해버린) 첫번째 실패 코드

import java.util.Arrays;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Arrays.sort(citations);
        
        for(int i=0; i<citations.length; i++) {
            int h = citations[i];
            if(citations.length - i <= h) {
                answer = h;
                break;
            }
        }
        
        return answer;
    }
}

테스트 케이스는 잘 돌아갔던 코드 녀석...

논문의 인용 수 citationsArrays.sort(citations);로 내림차순 정렬을 하여 큰 수 부터 정렬되도록 한다.

그리고 논문 하나씩 확인해가면서 남아있는 논문 수보다 해당 논문의 인용 수가 낮다면 반환하게 했다.

테스트 케이스를 성공해서 자신있게 제출을 눌렀으나

정말 테스트케이스만 우연찮게 맞았었나보다... 흑흑

answer로 저장이 될 hcitations[i]로 설정했다.
감자는 최소 논문 인용 수를 h라고 생각했던 것이다.

문제를 몇번 째려보자 이제서야 문제가 똑바로 보이기 시작했다.

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

알고보니 반환해야하는 값을 잘못 지정한거였다.

citations[i]가 아닌 citations.length - i를 해야 정상적인 h가 구해지는 거였다.

현재 논문의 인용된 수가 남아있는 논문의 수보다 크거나 같다면 "h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다"라는 조건에 해당되기 때문이다.
i가 h번 이상 인용된 논문의 개수이므로 남아있는 논문의 수보다 크거나 같다면 h편 이상이 되며 나머지 논문은 정렬 후 차례대로 접근한 것이므로 무조건 h번 이하로 인용이 된다.

그러니 현재 논문의 인용된 수 citations[i]가 아닌 인용된 수보다 작거나 같은 나머지 논문의 수citations.length - i를 구하면 되는 것이다.

국어 능력 이슈로 제대로 설명이 된 것 같진 않지만 다음에 같은 문제로 헤매게 될까봐 최대한 풀어써봤다...😅

profile
나는 말하는 감자다

0개의 댓글