알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!
이 문제는 H-index 값을 구하는 문제이다.(심플;)
그런데, 이 H-index 값을 이해하는 것부터 조금 애를 먹었다.(이해한 줄 알고 이상하게 풀다가 🚧삽질∞..🚧)
문제에서는 H-index 값을 아래와 같이 정의한다.
어떤 과학자가 발표한 논문 n편 중,
h번 이상 인용된 논문이 h편 이상이고
나머지 논문이 h번 이하 인용되었다면
h의 최댓값이 이 과학자의 H-Index입니다.
int[] citations = {9, 9, 9, 4}
⇒ answer = 4
를 잘 생각해보자..!!!h번 이상 인용된 논문이 h편 이상이고
h번 이상 인용된 논문이 딱 h편이라고 하지는 않았다..이상! 상!(사실 2),3)은 아래 나의 풀이에서 문제가 되었던 부분들이고, 프로그래머스에서 발견한 fancy한 풀이에서는..그닥 중요하지 않았다..ㅎ)
중간 중간 주석은 디버깅의 흔적이다..ㅎ 더럽지만 코드 이해에 도움이 될 수도 있다고 판단하여 남겨두었다..!
h번 이상 인용된 논문이 h편 이상이고
) h 값 갱신import java.util.Arrays;
public class Solution {
public static void main(String[] args) {
int[] citations = {0, 0, 1};
System.out.println("answer: " + solution(citations));
}
public static int solution(int[] citations) {
Arrays.sort(citations);
int h = 0;
for(int i = 0; i <= citations[citations.length-1]; i++) {
// System.out.println("현재 i : " + i);
for(int j = 0; j < citations.length; j++) {
if(i <= citations[j]) {
// System.out.println("i: " + i + " / j: " + j);
// System.out.println("남은 논문 수 : " + (citations.length-j));
if(i <= citations.length-j) {
h = i;
// System.out.println("h: " + h);
}
break;
}
}
}
return h;
}
}
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 smaller = Math.min(citations[i], citations.length-i);
answer = Math.max(answer, smaller);
}
return answer;
}
}