[정렬] H-Index (프로그래머스, Level 2) - Retry

Soorim Yoon·2022년 9월 14일
0
post-custom-banner

문제

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

  • citations 배열은 논문의 인용 횟수를 담은 배열이다.
  • n편의 논문 중, h번 이상 인용된 논문의 개수가 h인 최대 h 값을 구해라.

풀이

  • 딕셔너리를 만들어서 논문의 인용 수를 key 값, 해당 횟수만큼 인용된 논문의 개수를 value 값에 저장했다.
    예) {"6": 1, "5": 1, "3": 1, "1": 1, "0":1}
  • 최대 h값을 구하는 것이 문제이기 때문에, 딕셔너리를 key 값을 기준으로 내림차순으로 정렬해서, 앞에서 부터 value 값을 더해온다. 이 때, key값과 value 값의 합이 같아지는 순간의 key 값을 리턴한다.

테스트 결과

  • 문제에 제시된 테스트 케이스는 통과하여 맞는 알고리즘이라고 생각했는데, 나와있지 않은 다른 테스트들은 통과하지 못했다.
  • key 값과 value 값의 합이 같지 않는 순간도 테스트 케이스에 존재하는 듯 하다.
  • 다른 테스트 케이스들도 생각해서 이들을 모두 통과할 수 있는 방법을 다시 생각해보고자 한다.

💡 프로그래머스 강의노트 참고 :
https://school.programmers.co.kr/learn/courses/14743/lessons/118838

코드

오답 코드 (테스트 1만 통과)

def solution(citations):
    answer = []
    
    citations.sort(reverse = True)
    
    # hash => 논문의 인용 수를 hash에 저장
    hash = {}
    for i in citations:
        if i not in hash:
            hash[i] = 1
        else:
            hash[i] += 1
    
    # 논문 인용 수가 큰 -> 작은 순서로 정렬하면, 특정 지점의 왼쪽은 모두 그 논문보다 인용 수가 큰 논문이 됨
    hash = sorted(hash.items(), key = lambda x:x[0], reverse = True)
    
    count = 0
    for i in range(len(hash)):
        count += hash[i][-1]
        
        if count == hash[i][0]:     # h의 최댓값을 구해야하므로, 내림차순으로 정렬한 배열의 첫 번째 값부터 인용 수가 해당 값 이상인 논문의 개수를 카운팅
            answer = count
            break
                
    return answer

💡 코드 수정 시 참고하기 :
https://velog.io/@anneisa/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A42%EB%8B%A8%EA%B3%84%EC%A0%95%EB%A0%AC-H-Index

profile
👩🏻‍💻 AI를 좋아하는 IT학부생
post-custom-banner

0개의 댓글