ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • git bash
  • HashMap
  • BFS
  • 깃허브
  • PriorityQueue
  • sort
  • 깃
  • 백준
  • java
  • Queue
  • compareTo()
  • Arrays.sort()
  • dfs
  • reactjs
  • 안드로이드
  • 스택/큐
  • entrySet
  • 코틀린
  • Android
  • greedy
  • 프로그래머스 Lv.2
  • git
  • 프로그래머스
  • stack
  • 해시
  • React
  • kotiln
  • Comparator
  • DP
  • getOrDefault

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 Lv.2 : H-Index

2022. 3. 13. 09:38

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

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

문제이해가 잘 되지않아서 테스트 케이스를 많이 추가해서 풀었었다..

# 테스트 케이스 공유

Parameters Return
[3, 1, 0] 1
[3, 1, 1, 1, 4] 2
[0, 0, 0, 1] 1
[9, 9, 9, 12] 4
[1, 1, 5, 7, 6] 3
[0, 0, 0] (테스트 16번) 0

 

풀이

h를 발표한 논문 수(n)의 중간값(n/2)으로 초기화 시킨다.

논문 n편 중 h번 이상 인용된 논문이 h편 이상인 시점을 찾기 위해(이때, n이 h보다 커질 수 없음) 반복문을 돌린다.

  • (ctn-h)번째 논문의 인용횟수가 h번 이상일 때,
    • cnt-h-1번째 논문의 인용횟수가 h번 이하면 h값을 return
    • cnt-h-1번째 논문의 인용횟수가 h번 이상이면 인용횟수(h)를 증가
  • (ctn-h)번째 논문의 인용횟수가 h번보다 작다면 인용횟수를 감소

이때, 인용횟수 h가 0이라면 0을 return한다.

밑의 코드에서 answer은 인용횟수 h이다.

import java.util.*;
class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        int n = citations.length; // 발표한 논문 수
        // citations 정렬
        Arrays.sort(citations);
        
        // answer 중간값으로 초기화
        answer = n/2;
        // citations[cnt - answer] 가 answer 이상, 남은 논문이 answer번 이하인지
        // 이하면 answer--
        while(answer<n){
            if(citations[n-answer]>=answer){
                if(citations[n-answer-1]<=answer) break; // 원소값이 인용횟수 이하인 시점에서 return
                answer++;
            }
            else answer--;
            if(answer==0) break;
        }
        
        return answer;
    }
}

 

+ 다른사람풀이

원소값은 점점 감소하고, 원소 값 이상인 것의 개수는 점점 감소하므로 이 두 값의 최소값의 변화가 증가하다가 감소하는 지점이 답이라는 규칙으로 풀어냈다.

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        Arrays.sort(citations);

        int max = 0;
        for(int i = citations.length-1; i > -1; i--){
            int min = (int)Math.min(citations[i], citations.length - i);
            if(max < min) max = min;
        }

        return max;
    }
}

 

저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 Lv.2 : 소수 찾기  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : 카펫  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : 더 맵게  (0) 2022.03.13
[Java] 프로그래머스 Lv.2 : 주식가격  (0) 2022.03.11
[Java] 프로그래머스 Lv2 : 프린터  (0) 2022.03.11
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 Lv.2 : 소수 찾기
    • [Java] 프로그래머스 Lv.2 : 카펫
    • [Java] 프로그래머스 Lv.2 : 더 맵게
    • [Java] 프로그래머스 Lv.2 : 주식가격
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바