ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스_정렬_레벨2_H-Index
    코딩/코딩테스트 2021. 5. 14. 00:48

     

     

    문제

     

    문제 설명

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

    어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

    어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

     

    제한사항

    과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.

    논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

     

     

     

    내 풀이

    # 내 풀이, 최대시간: 0.18ms
    def solution(citations):
        sortList = sorted(citations, reverse=True)
        for h, v in enumerate(sortList):
            if v <= h:
                return h
        return len(sortList)

     

    해결법

    논문 인용 횟수가 담긴 citations 배열을 내림차순으로 정렬한 후, h값과 h + 1번째 논문의 인용횟수를 비교합니다.

    sortList[h] 값이 h보다 작아지면 h번 이상 인용된 논문이 h + 1개 이하라는 의미이므로, 최대값은 h가 됩니다.

    for 문을 빠져나오면 가장 인용이 조금 된 논문의 인용횟수도 전체 논문의 수보다 크다는 의미이므로, 전체 논문의 수를 그대로 return합니다.

     

     

    문제점, 보완할 점

    더 간결한 코드로 만들 수 있을 것 같습니다.

     

     

     

     

    모범 풀이

    # 모범 풀이, 최대시간: 0.32ms
    def solution(citations):
        citations.sort(reverse=True)
        answer = max(map(min, enumerate(citations, start=1)))
        return answer

     

    해결법

    enumerate (list, start= 1) = [(1, list[0]), (2, list[1]) ...]를 사용해서, 1부터 시작하는 index값과 list값 중 작은 값을 리스트에 넣었습니다.

    넣은 값 중에 가장 큰 값, 즉 인덱스와 리스트 값이 교차하는 범위에서 가장 큰 값을 출력했습니다.

     

     

    배울점

    1부터 시작하는 값과 정렬된 citations의 값을 map함수로 합쳐서 간결한 코드를 만들었습니다.

    map함수 안에 min조건을 줘서 더 간결한 코드를 작성했습니다.

    map함수를 사용해서 코드를 간결하고 보기 좋게 만들 수 있다는 점을 배웠습니다.

     

     

     

     

    반응형

    '코딩 > 코딩테스트' 카테고리의 다른 글

    프로그래머스_완전탐색_레벨2_소수찾기  (0) 2021.05.14

    댓글

Designed by Tistory.