Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

발전하는 개발자가 되자

프로그래머스 알고리즘 : H-index (java) 본문

개발공부/알고리즘

프로그래머스 알고리즘 : H-index (java)

백경훈 2019. 3. 21. 20:14

프로그래머스 알고리즘 (java)

H-index

프로그래머스 (H-index)

코드 리뷰

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주는 문제 입니다.

조건

  1. 논문수 = 배열의크기 n
  2. 인용 횟수 h
  3. 인용횟수가 h 인 논문의 수가 h 이면 통과
  4. 반복 횟수 k

풀이 방향

가정 -1

  1. 작은수로 정렬
  2. 작은수를 기준으로 h 를 선정
  3. k = 배열의 크기 - 기준인 h 의 인덱스
  4. k < h 보다 작으면 증가
  5. K >= h 일 때 까지 반복

가정 -1 문제

h가 바로 통과 함
그럼 내림차순으로 정렬하고 해보자

가정-2

  1. 큰수로 정렬
  2. 큰수를 기준으로 h 를 선정
  3. k = 배열의 크기 - 기준인 h 의 인덱스
  4. k < h 보다 작으면 증가
  5. K >= h 일 때 까지 반복

기준을 잘못잡았다.

  1. k < h 보다 작으면 증가
  2. K >= h 일 때 까지 반복 이 아닌 k <= h 면 그만둬야함

코드

import java.util.Arrays;

public class HIndex {
    public int solution(int[] citations) {
        int answer = 0;
        int length = citations.length;
        int h = 0;
        int k = 0;
        Arrays.sort(citations);

        for (int i = 0; i < citations.length; i++) {
            h = citations[i];
            k =  citations.length - i;
            if (k <= h) {
                answer = k;
                break;
            }
        }
        return answer;
    }
}

느낀 점

저는 알고리즘을 풀 때 어떤식으로 풀어야 쉽게 문제를 풀 수 있을지 생각하는 시간이 오래 걸렸습니다. 그래서 이번엔 가정을 새우고 그 가정에 따라 코드를 구현하고 반례가 있나 확인한 후 다시 가정을 수정하는 식으로 문제를 접근했더니 예전보다 코드구현 속도가 빨라진거 같았습니다. 문제를 해결할 때 이런식으로 접근하면 알고리즘 문제를 빠르게 풀 수 있을거 같다는 자신감을 얻었습니다.

Comments