관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[알고리즘] 프로그래머스 H-Index -정렬- 본문

알고리즘/문자열, 정렬

[알고리즘] 프로그래머스 H-Index -정렬-

막무가내막내 2020. 4. 14. 03:19
728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

 

문제를 이해하기 어려웠습니다... ㅠㅠ 특히 문제에서 나머지 논문이 h번 이하 인용되었다면을 -> h번 이하 인용된 논문이 h편 이하의 개수여야한다로 잘못이해해서 엄청 삽질했습니다. (h번 이상 인용된 논문이 h편 이상의 개수인 것만 만족하면 되는데 말이죠..)

매번 문제를 이상하게 해석하는 경우가 많은데 정신 똑바로 차려야겠습니다...

 

[풀이]

ex) 3, 0, 6, 1, 5

=> 오름차순 정렬 0, 1, 3, 5, 6    --> cite

위 각 인용된 논문 개수  =>  5, 4, 3, 2, 1   --> h (0회 이상 인용된 논문 개수 5, 1회 이상 4)

0 하고 5 비교 -> 인용된 논문이 5개 이상이여야하는데 0이므로 h-index 성립 X

1 하고 4 비교 -> 마찬가지

3 하고 3 비교 -> 인용된 논문이 3개인데 3개 이상이므로 h-index 성립 (그리고 오름차순으로 되어있으므로 뒤로 갈수록 h-index가 작아지므로 처음 찾은게 최댓값이 됩니다. 중복도 마찬가지)

 

 

ex2)

1,   1,   1,   1 ,1, 2, 4, 4, 7, 7,8, 12, 13 // 13개(중복있는예제)

13, 12, 11, 10, 9, 8, 7, 6, 5,4, 3, 2, 1

=> 답 5

import java.util.Arrays;

class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.solution(new int[]{1,1,1,1,1, 2, 4, 4, 7, 7,8, 12, 13}); // 13개
    }


    public int solution(int[] citations) {
        int answer = 0;
        int N = citations.length; // 논문의 수
        Arrays.sort(citations); // 정렬
        for (int i = 0; i < N; i++) {
            int cite = citations[i];
            int h = N - i; 
            if (h <= cite) { 
                answer = h; 
                break;
            }
        }
        return answer;
    }
}

 

 

공감과 댓글은 큰 힘이 됩니다.! 감사합니다

728x90
Comments