99클럽 코테 스터디
간단한 정렬 문제이다. 발표 시간 직전까지 자바 미들러 발표자가 안 나와서, 정말 아무도 발표자가 안 나오면 나라도 발표하려고 오랜만에 자바로 풀어보았다.
자바 문법이 기억안나는게 많아서 검색을 여러 번 했다...
1번 문제 H-Index : https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java
출처 : 프로그래머스
풀이 접근
풀이는 간단하다. 논문의 인용 수를 내림차순으로 정렬하고, 앞에서부터 순회한다.
- 논문의 인용 수가 높은 것부터 1번째 논문의 인용수가 1 미만이면, H-index는 0이 되고, 그렇지 않으면 1 이상이다.
- 논문의 인용 수가 높은 것부터 2번째 논문의 인용수가 2 미만이면, H-index는 1이 되고, 그렇지 않으면 2 이상이다.
...- 논문의 인용 수가 높은 것부터 k번째 논문의 인용수가 k 미만이면, H-index는 k-1이 되고, 그렇지 않으면 k 이상이다.
이걸 코드로 구현하면 된다. 근데 자바로 int[]는 Arrays.sort(배열, Collections.reverseOrder())가 안되더라. int가 원시 자료형이라 그렇다고 한다.
근데 Integer로 바꿔서 하기는 귀찮아서 그냥 기본 오름차순 정렬로 하고 인덱스를 뒤에서부터 셌다.
코드(Java, 통과, 최대 1.01ms, 81MB)
코드가 특정 언어'스럽다'라고 표현하기도 하는데, 아마 파이썬에 익숙해져서 코드가 자바스럽지 않고 파이썬스러울 수도 있다.
citations를 정렬하고, 뒤에서부터(인용 수가 큰 것부터) k번째 논문의 인용 수가 k 미만이 최초로 되면, k-1을 H-index로 반환한다.
for문을 끝까지 통과하면, n개의 논문 모두 인용수가 n 이상이므로 H-index로 n을 반환한다.
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int n = citations.length;
Arrays.sort(citations);
for (int i = 0; i < n; i++) {
if (citations[n - i - 1] < i + 1) {
return i;
}
}
return n;
}
}