AngelPlayer`s Diary

링크

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

문제 해석

H-index 구하라

 

문제 설명 : n편의 논문 중, h번 이상 인용된 논문이 h편 이상이고, h번 이하 인용되었다면, h의 최댓값이 H-index이다.

(아래 풀이 & 코드 해석에서 부연설명)

 

 

 

 

풀이 & 코드 해석

문제가 해석이 안되신다면 정상입니다.

 

오히려 프로그래머스에서 제공하는 문제가 더 어려운 문제였다고 생각됩니다.

 

코딩 테스트라기보다는 오히려 독해 문제라고 하는게 옳지 않았나라는 개인적인 생각이 드네요.

 

 

 

https://postechlibrary.tistory.com/489

 

[h-index] 당신의 H는 무엇입니까?

h-index의 등장배경 h-index는 물리학자인 Jorge Hirsch에 의해 고안된 지표입니다. 특정 저자의 전체 논문수와 피인용수를 바탕으로 과학자(물리학자)의 연구성과, 공헌도를 하나의 수로 나타냅니다. '

postechlibrary.tistory.com

위 사이트에서 h-index에 대해서 쉽고 정확하게 설명하고 있습니다.

 

 

문제의 요점 & 풀이법은

논문을 인용수 내림차순으로 정렬하였을 때,

논문의 정렬 순서(no)와 논문의 인용수(citations)가 같은 경우, 또는 정렬 순서보다 인용수가 작은 경우 해당 no가 H-index가 된다는 아이디어를 통해서 문제를 해결하는 것입니다.

 

 

 

 

코드

import java.io.*;
import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = citations.length;
        
        int no = 1;
        Arrays.sort(citations);
        
        for (int i = citations.length-1; i >= 0; i--) {
            System.out.println(no + " : " + citations[i]);
            if (no == citations[i]) {
                answer = no;
                System.out.println(answer);
                
                break;
            } else if (no > citations[i]) {
                answer = no - 1;
            } else {                
                no++;
            }
        }
        
        return answer;
    }
}

기존에 작성한 코드는 위에서 설명한 내용을 토대로 구현하였습니다.

 

 

 

다른 사람 풀의의 솔루션에서는 좀 더 효율적으로 구현하신분의 코드도 있으니 참고하시면 좋을 것 같습니다.

 

 

 

 

발생한 문제 & 해결 방안

문제가 헷갈려서 너무 어려웠다.

 

 

 

 

 

 

 

 

 

해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.

혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!

python source : https://github.com/ssh5212/conding-test-practice

java source : https://github.com/ssh5212/coding-test-java

공유하기

facebook twitter kakaoTalk kakaostory naver band