[프로그래머스] H-Index 📇 (Python) / level2 / 정렬

반응형

Programmers Logo

 

 

Contents

     


     

    1.  문제🔥

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

    문제

    과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 주어집니다. 발표한 논문 n편 중, h번 이상 인용된 논문이 h 편 이상이고, 나머지 논문이 h번 이하 인용되었다는 조건을 만족하는 h의 최댓값을 반환해야 합니다.

    1) 예제 입출력❄️

    예제 입출력

    2. 핵심 논리☢️

    citations를 정렬하고, 이분 탐색을 이용해 0부터 citations의 길이만큼 h로 반복하며, 인용횟수가 h 이상인 논문의 개수를 bisect(이분 탐색)을 이용해서 구하는 것이 핵심입니다.

    (bisect_left는 아래 글에서 개념을 설명하고 있습니다.)

    2022.03.26 - [Programming/알고리즘] - [백준] (12015, 12738) - 가장 긴 증가하는 부분 수열2,3 (Python - bisect)

    3. 풀이 코드

    from bisect import bisect_left
    
    def solution(citations):
        citations.sort()
        result=0
        for h in range(len(citations)+1):
            h_papers = len(citations[bisect_left(citations, h):])
            if h_papers >= h:
                result = h
        return result

    citations를 정렬하고, h의 최대값을 반환할 변수 result를 0으로 초기화합니다. 0부터 len(citations)+1 만큼 h(인용 횟수)로 반복합니다. len(citations[bisect_left(citations, h):]) 부분은 인용 횟수 h 이상인 논문의 개수를 의미합니다. 인용 횟수 h가 citations에 들어갈 부분에서 리스트의 끝까지 :로 슬라이 싱하여 길이를 구하는 원리입니다. 다음에 조건문에서 h_papers(인용 횟수가 h 이상인 논문의 개수)h이상이면 result=h를 넣어줍니다. for문이 h에 대해 점점 커지며 반복하기 때문에 result=max(result, h)가 아니라 result=h 만 해줘도 됩니다. 

     

    읽어주셔서 감사합니다.

    다음에 더욱 유익한 글로 찾아오겠습니다.

     

    * 관련 풀이 코드는 아래 깃허브 링크에 있습니다.

    https://github.com/netsus/Programmers/blob/0ffde5fd0caa2c1e53ace481e7d1a08966bdc725/Level2_H_index.ipynb

     

    GitHub - netsus/Programmers: Programmers algorithm test code

    Programmers algorithm test code. Contribute to netsus/Programmers development by creating an account on GitHub.

    github.com

     

     

     

    Reference)
    1. Programmers Logo: https://programmers.co.kr/
    반응형

    댓글

    Designed by JB FACTORY