codes/programmers

42747 H-Index

카제xd 2025. 1. 1. 15:05

https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=python3

 

 

# trial 1 -> 실패

from collections import Counter

def solution(citations):    
    cntls = Counter(citations)
    sorted_cntls = sorted(cntls.items(), key=lambda x: x[0], reverse=True)
    
    accum_cnt = 0
    for k, v in sorted_cntls:

        accum_cnt += v
        if accum_cnt >= k:
            return k
    
    return accum_cnt

 

 

# trial 2 -> 성공

from collections import Counter

def solution(citations):    
    cntls = Counter(citations)
    sorted_cntls = sorted(cntls.items(), key=lambda x: x[0], reverse=True)
    
    accum_cnt = 0
    for k, v in sorted_cntls:

        if accum_cnt >= k:
            return accum_cnt
        
        accum_cnt += v
        if accum_cnt >= k:
            return k
    
    return accum_cnt

 

 

# 타인 코드 참조 후 수정

- 현재시점(인용횟수 n) 포함해서 총 남은 편수(=n 이상의 인용횟수를 갖는 편수)가 현재의 인용횟수보다 클 경우를 조건으로 해서, 같거나 넘치는 순간 그 편수를 반환하는 원리

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

 

 

[개선할 점]

- greedy하지 않게 규칙성을 찾는 연습이 필요하다.

- 다양한 반례를 스스로 찾는 연습이 필요하다.

# 추가적으로 사용한 테스트케이스
tests = [
    ([0], 0),
    ([3, 4], 2),
    ([1, 2, 3, 5, 6, 7, 10, 11], 5),
    ([3, 5, 11, 6, 1, 5, 3, 3, 1, 41], 5),
    ([1, 11, 111, 1111], 3),
    ([5,6,7,8], 4)
]

 

 

'codes > programmers' 카테고리의 다른 글

87946 피로도  (1) 2025.01.07
42746 가장 큰 수  (0) 2024.12.31
42583 다리를 지나는 트럭  (1) 2024.12.30
42578 의상  (0) 2024.12.27
42584 주식가격  (1) 2024.12.27