오늘의 학습 키워드:  리스트

문제: H-Index

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

 

프로그래머스

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

programmers.co.kr

 

풀이

H인덱스에 대한 개념을 이해하는 게 가장 어려웠던 문제다.

주어진 citations 은 각 논문의 인용 횟수를 말한다.

 

어떤 과학자가 발표한 논문 n편 중,

h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면

h의 최댓값이 이 과학자의 H-Index입니다.

 

일단 그럼 n번 인용된 논문을 파악해 본다. 이해를 위해 정렬을 우선 수행한다. [0,1,3,5,6]

 

1번 인덱스의 인용 횟수: 0회 / 0회 이상 인용된 논문의 수 5개 / 5편 이상 인용된 논문이 5편 이상이다.
=> 1,3 은 5편 이하로 인용되었다. => false

 

2번 인덱스의 인용 횟수: 1회 / 1회 이상 인용된 논문의 수 4개 / 4편 이상 인용된 논문이 4편 이상이다
=> 1,3은 4편 이하로 인용되었다. => false

 

코드의 동작 예시

 i = [1,3]

j = [0,1,3,5,6]

 

# 1인 경우

j>=i => 1,3,4,6 => count =4  1회 이상 인용된 논문의 수 4개

i>=count 등호가 들어가있기 때문에 우선 자기 자신부터 인용된 논문의 수와 같아야 한다.

 

# 3인경우

j>=i => 3,4,6 => count =3  1회 이상 인용된 논문의 수 3개

i>=count 등호가 들어가 있기 때문에 우선 자기 자신부터 인용된 논문의 수와 같아야 한다. => 그런데 같다. 그럼 후보에 올릴 수 있다.

 

마지막은 후보들 중에서 최댓값 h를 찾아주면 된다.

def solution(citations):
    new_cit = []
    for i in citations:
        if i == 0:
            pass
        else:
            count = 0
            for j in citations:
                if j>=i:
                    count+=1
            if i>=count:
                new_cit.append([i,count])
    new_cit.sort(key = lambda x:x[1],reverse=True)
    
    if new_cit:
        return new_cit[0][1]
    else:
        return 0

 

회고

솔직히 문제 자체가 이해가 잘 안 되는 감이 좀 있었던 문제이다..

내일 학습할 것.

SQL, Python, 독서

 

+ Recent posts