썬2 2021. 9. 25. 12:06

https://programmers.co.kr/learn/courses/30/lessons/42747?language=python3 

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 

나의 답:

def solution(cite):
    answer = 0
    cite.sort(reverse=True) # 역순으로 정렬 하기
    for h in range(cite[0], 0, -1): # 최댓값 부터 계산
        if (len(cite) >= h) and (cite[h-1] >= h): # 인용수 조건 만족 여부 판단
            answer = h
            break
    return answer

 

 

베스트 답안:

def solution(citations):
    citations.sort(reverse=True)
    answer = max(map(min, enumerate(citations, start=1)))
    return answer
  • enumerate(start)를 이용해서 현재 자신보다 큰 수가 몇개 있는지 판단한다.
  • citations = [6, 5, 3, 3, 1, 0]
    for i in enumerate(citations, start=1):
        print('i',i, min(i))
    
    # i (1, 6) 1
    # i (2, 5) 2
    # i (3, 3) 3
    # i (4, 3) 3
    # i (5, 1) 1
    # i (6, 0) 0
  • enumerate로 (index, value)형태로 묶는다. 그리고 최댓값(start = 1)부터 각 value에 대해 최솟값 value의 값을 min으로 추출하고, 이 추출된 값은 enumerate가 끝나는 citations 리스트의 크기에 해당하는 갯수가 나온다. 이들을 map으로 묶으면, 한 value의 입장에서 보는 최솟값 value의 집합이 나온다. 즉 h값들의 집합이나온다. h값중 최대값을 max로 뽑아서 출력하면 된다.