Coding Test/Sorting

[Sorting] H-Index

byunghyun23 2023. 9. 8. 01:41

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

 

프로그래머스

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

programmers.co.kr

 

흔히 알고 있는 H-Index를 계산하는 문제입니다.

citations을 정렬하고, h를 0부터 10,000까지 반복하여 h편이상 인용된 논문 수를 c, 나머지 논문 수를 r에 저장합니다.

 

주어진 조건에 맞게 c >= h and r <= c를 통해 answer에 h를 저장합니다.

추가로, h값이 citations에 없는 경우가 있기 때문에 h >= citations[i]일 때만 i의 값을 1증가시킵니다.

def solution(citations):
    answer = 0
    
    citations.sort()
    print(citations)
    
    n = len(citations)
    
    i = 0
    for h in range(10001):
        if i < n:
            c = len(citations[i:])
            r = n - c

            if c >= h and r <= c:
                answer = h
                
            if h >= citations[i]:
                i += 1        

    return answer

 

하지만 채점 결과에서 테스트 16을 통과하지 못 했습니다. 어떤 케이스인지 생각해보니 [0, 0]을 입력으로 받을 때, 결괏값이 1이 나왔습니다.

 

이를 해결하기 위해 인용된 논문 수의 합이 0일 때, 0을 반환할 수 있도록 아래와 같이 수정했습니다.

def solution(citations):
    answer = 0
    
    citations.sort()
    print(citations)
    
    if sum(citations) == 0:
        return 0
    
    n = len(citations)
    
    i = 0
    for h in range(10001):
        if i < n:
            c = len(citations[i:])
            r = n - c

            if c >= h and r <= c:
                answer = h
                
            if h >= citations[i]:
                i += 1        

    return answer

 

코딩테스트 정렬 문제는 정렬할 때, 조건이 붙거나 "H-Index" 문제처럼 정렬 후 어떤 조건을 기반으로 탐색하는 유형도 많이 있습니다.

'Coding Test > Sorting' 카테고리의 다른 글

[Sorting] 가장 큰 수  (0) 2023.09.07