99클럽 코테 스터디 12일차 TIL - H-Index

Wonjun·2024년 8월 1일
0

알고리즘 & 문제풀이

목록 보기
49/50
post-thumbnail

H-Index

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

  • 제출 코드
def solution(citations):
    answer = 0
    citations.sort(reverse=True)
    
    for idx, citation in enumerate(citations):
        if citation >= idx + 1:
            answer = idx + 1
    return answer

H-index
n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index

예시 1) [3, 0, 6, 1, 5]
위와 같은 citations를 가지고 있는 과학자의 경우 H-index는 3이다.
3회 이상 인용된 논문(3, 5, 6) 3편 이상이고 나머지 논문(1, 0)이 3번 이하 인용되었다.
citation을 정렬시켜서 보면 더 편하게 H-index를 파악할 수 있겠다는 생각을 했다.
h번 이상 인용된 논문의 갯수를 세고, 나머지 논문들이 h번 이하 인용되었다는 것은 정렬된 리스트에서 한 원소를 기준으로 오른쪽 원소들과 왼쪽 원소들과 연관이 있기 때문이다.
내림차순 정렬을 선택한 이유는 반복문을 돌며 앞에서부터 확인을 하면 인덱스 + 1만큼이 논문의 갯수가 되고, 조건을 만족하는 인덱스 + 1의 최댓값이 H-index가 된다.
최초에는 오름차순 정렬을 생각했으나, len(citations) - idx 같이 불필요한 계산이 포함되는 이유도 있다.

  1. citations 리스트 내림차순 정렬
  2. citations 리스트를 순회하며 원소 값과 인덱스 비교
  3. 원소 값 >= 인덱스 + 1이면 answer에 인덱스 + 1(h를 의미)을 할당


회고

  • 미들러 문제를 풀면서 가장 오래걸렸던 것 같다.

  • 말로는 명쾌하게 설명을 하지 못하는 한계를 느껴 손으로 쓰게 되었다.

profile
알고리즘

0개의 댓글