[프로그래머스] LV2. H-index- 파이썬

곌로그·2023년 10월 19일
0

[python]코딩테스트

목록 보기
25/34
post-thumbnail

문제 링크


문제 요약

정렬문제 에 해당한다.

발표한 논문 n 편 중에 h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 h-index이다. h-index 값을 return


문제 풀이

def solution(citations):
    answer = 0
    
    h_index = sum(citations) // len(citations)
    count = 0
    while count < h_index:
        for i in range(len(citations)):
            if citations[i] >= h_index:
            # 해당 인덱스의 논문 인용횟수가 h_index 보다 크다면, 
                count +=1
        if count >= h_index:
        # h_index 이상 인용된 논문의 개수가 h_index 이상일 때,
            answer = h_index
        else:
        # 아니라면, h_index 1만큼 감소 / count 초기화
        # 1만큼 감소하는 이유 = h번 이상 인용된 논문의 개수가 h_index 미만이라는 뜻
            if h_index < 0:
                h_index = 0 
            h_index -=1
            count = 0
        
    return answer

📌 고려해야할 점

  • h_index를 주어진 논문들의 인용 횟수의 평균으로 초기화 후 비교 진행
  • 20분만에 테스트 케이스를 통과한 문제이기는 하다. 하지만, while문과 for문을 사용하고 테스트케이스 실행 속도 측면에서 느렸기 때문에 다른 분들의 코드를 확인했다. ⬇️
def solution(citations):
    answer = 0
    citations.sort(reverse=True)
    
    for i in range(len(citations)):              # H_index가 존재하고 H_index를 넘는 논문이 몇 개인지 구할때
        if(citations[i] < i+1):
            return i

    return len(citations)                     # 인용 횟수가 모두 같을때는 전체를 return

H-index에대한 이해를 한다면 충분히 나올 수 있는 풀이라고 생각한다.
<1> 내림차순으로 정렬
<2> 인용횟수가 인덱스+1을 넘어가는 경우가 오면 해당 인덱스 return
<3> 인용횟수가 모두 같으면 전체 길이를 return

더 자세한 설명은 아래 링크에 더 잘 설명되어있다!
바로 가기

0개의 댓글