[Programmers] H-Index

2023. 8. 10. 17:31Computer Sciences/Problem Solve

https://school.programmers.co.kr/learn/courses/30/lessons/42747#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

설명도 적고 불친절하여 문제를 이해하는 데 시간을 많이 쓴 문제다. 필자와 같은 느낌을 받은 분들도 적지 않아 보였다. 아래는 참고한 글이다.

https://dev-musa.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Level-2-H-Index-%EC%BD%94%ED%8B%80%EB%A6%B0

 

프로그래머스 알고리즘 Level 2 H-Index 코틀린

H-Index https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이

dev-musa.tistory.com

필자가 처음에 이해한 것은 인용된 횟수가 h인줄 알았다. 예를 들어 [1000, 2000, 3000, 4000, 5000] 이 있으면 3000번 이상 인용된 횟수가 3번이고 과반수가 넘기 때문에 최댓값이 되므로 3000이 정답인 줄 알았다. 그러나 5번 이상 인용된 논문이 5개이므로 5가 정답이다. 윗 글로 문제를 이해하고 나니 너무 쉬운 문제임을 깨닫고 이를 이해하려고 보낸 시간이 허무했다. 간단하게 오름차순으로 정렬한 뒤 순서대로 접근하면서 논문 인용 횟수가 인덱스보다 커지면 (모든 논문 개수 - 해당 인덱스) 를 반환하면 된다. h의 최댓값은 모든 논문 개수이다.

예를 들어 [3, 0, 6, 1, 5]가 있으면 이를 오름차순 정렬하면 [0, 1, 3, 5, 6]이 된다.

 

h = 5, if (0(인용된 횟수) >= 5(h)) continue;

h = 4, if (1(인용된 횟수) >= 4(h)) continue;

h = 3, if (3(인용된 횟수) >= 3(h)) return h(3);

 

따라서 3이 반환된다. 나머지는 당연히 3보다 많이 인용됐으므로 비교하지 않아도 된다.

코드

import java.util.Arrays;

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

'Computer Sciences > Problem Solve' 카테고리의 다른 글

[Programmers] 교점에 별 만들기  (0) 2023.08.16
[Programmers] [1차] 캐시  (0) 2023.08.16
[Programmers] n^2 배열 자르기  (0) 2023.08.10
[Programmers] 괄호 회전하기  (0) 2023.08.09
[Programmers] 귤 고르기  (0) 2023.08.09