[프로그래머스] H-Index

kiki·2024년 1월 14일
0

프로그래머스

목록 보기
64/78

문제 링크

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

문제 설명

  • 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
  • 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return

n차 시도 - 통과

def solution(citations):
    citations = sorted(citations, reverse=True)
    for h in range(len(citations),1,-1):
        for n,j in enumerate(citations):
            if j<h:
                break
            if n+1>=h:
                return h
    return 0

citations을 내림차순으로 정렬하고, h를 n편부터 내림차순으로 확인해보면서 over인 논문이 h편이상인지 확인했다.

나름 잘 짠 코드라고 생각했는데 다른 풀이를 보니까 소심해지네...

일단 sorted 쓰지 않고 citations.sort(reverse=True) 썼으면 됐다.

다른 사람의 풀이

def solution(citations):
    citations = sorted(citations)
    l = len(citations)
    for i in range(l):
        if citations[i] >= l-i:
            return l-i
    return 0

처음 보곤 이해가 안됐었는데, 결국엔 내가 위의 코드에서 사용한 j<h를 다르게 이용한 거라고 보면 될 것 같다.

오름차순으로 citations를 정렬하고, for문을 돌면서 citations[i] 값이 l-i보다 크거나 같은지 확인하는 것이다. 여기서 l-i는 for h in range(l,1,-1)을 다르게 쓴 것과 같다. 즉 h를 의미한다.

결국 if citations[i] >= l-i 이 코드가 h번 이상 인용된 논문이 h편 이상이라는 뜻이다.
이로써 이중 for문을 쓰지 않고 문제 해결이 가능해진다.

좀 더 간단하게 얘기하면 citations가 오름차순 정렬되어있기 때문에 l-i가 i번째 논문보다 인용수가 같거나 큰 논문 갯수를 의미하는 데, 이때 해당 위치의 논문 인용수가 l-i보다 크다면 h번 이상 인용된 논문이 h편 이상이라는 것이다. 어후 헷갈려

정리

와 근데 문제가 이해하기가 너무 어려워서인지 정리가 잘 안된다.
여러번 봐야겠다.
정리는 추후에...
아니 근데 이걸 첫 눈에 어떻게 떠올리지??????? 코테를 얼마나 공부해야 저 생각이 바로 떠오르지

0개의 댓글