알고리즘

프로그래머스 - H-index

ghtis1798 2021. 6. 17. 17:45

프로그래머스 - H-index

🔸 문제 접근 방식

다음 방식으로 문제를 접근하였다.

  1. 논문이 인용될 최대값을 H-index로 설정한 뒤 1씩 감소시켜가며 H-index 조건을 확인한다.
    • 인용될 최대값은 len(citations)
  2. H-index는 두 조건을 만족한다.
    • H-index 회 이상 인용된 논문의 수가 H-index 이상이다.
    • H-index 회 이하 인용된 논문의 수가 H-index 이하이다.
  3. H-index 의 최대값을 선택한다.

📌 문제 풀이

정렬 문제이기는 하나, H-index가 될 target값을 기준으로 citations을 분리했다.

  1. target값보다 크거나 같은 논문은 bigList에 추가
  2. target값보다 작거나 같은 논문은 smallList에 추가

그리고 2 조건을 만족하면 H-index 그룹인 resultList에 추가하였다.

  1. target값과 bigList의 원소 값이 크거나 같다.
  2. target값과 smallList의 원소값이 작거나 같다.

최종적으로 reusltList의 최대값을 뽑아내 반환함으로써 문제를 해결했다.

💧 Source Code

def solution(citations):
    ''' 가장 큰 인용횟수부터 H-index 찾기

    Notes:
        1. target값의 최대값부터 1씩 내려온다.
        2. target값보다 크거나 같은 값을 bigList에 모은다.
        3. target값보다 작거나 같은 값을 smallList에 모은다.
        4. 다음 두 조건을 만족하면 최종 resultList에 target값을 추가한다.
            - bigList의 개수(target보다 많이 인용된 논문수)가 target값보다 크거나 같다.
            - smallList의 개수(tartget보다 적게 인용된 논문수)가 target값보다 작거나 같다.
        5. resultList 중 최대값을 구한다.

    Args:
        citations (List): int형 값들을 담고 있는 List

    Returns:
        answer (int) : H-index의 최대값으로 정수값
    '''

    resultList = []

    for target in range(len(citations), 0, -1):
        bigList = [big for big in citations if target <= big]
        smallList = [small for small in citations if target >= small]

        if (len(bigList)>=target) & (len(smallList)<=target):
            resultList.append(target)

        print(target)

    if len(resultList) >= 1:    
        answer = max(resultList)
        return answer
    else:
        return 0

citations = [0]
print(solution(citations))

👍 Best Code


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

정렬을 수행한 뒤, 인용 횟수의 최소값부터 조건을 탐색했다.

조건은 인용 횟수가 전체 논문 수 - i보다 크거나 같으면 해당 값을 반환한다.

  • 만약 가장 적은 인용 횟수가 전체 논문수보다 크거나 같다면 해당 값 반환

❓ 예를 들어 논문수가 7개이고, 가장 적게 인용된 횟수가 7이라면?

→ 7이 H-index가 된다.

→ citations[0] == 7, l-i = 7-0