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;
}
}
테스트 케이스는 잘 돌아갔던 코드 녀석...
논문의 인용 수 citations
를 Arrays.sort(citations);
로 내림차순 정렬을 하여 큰 수 부터 정렬되도록 한다.
그리고 논문 하나씩 확인해가면서 남아있는 논문 수보다 해당 논문의 인용 수가 낮다면 반환하게 했다.
테스트 케이스를 성공해서 자신있게 제출을 눌렀으나
정말 테스트케이스만 우연찮게 맞았었나보다... 흑흑
answer
로 저장이 될 h
를 citations[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
를 구하면 되는 것이다.
국어 능력 이슈로 제대로 설명이 된 것 같진 않지만 다음에 같은 문제로 헤매게 될까봐 최대한 풀어써봤다...😅