Programing/프로그래머스 오답노트

[프로그래머스] H - index - ( 11, 16번 케이스 오류 - 다루지 않은 조건을 염두하자 )

yooom 2023. 9. 25. 00:38
문제 설명

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

 

 

풀이
def solution(citations):
    citations.sort(reverse = True)
    stack = []
    for i in citations:
        stack.append(i)
        if len(stack) >= i:   # [6,5,3,1,0] 일 때, len([6,5,3]) >= 3 이므로
            return i        # i = 3

이렇게 작성했는데, 틀렸다.

이유는 [0,5,6,7,8] 같은 리스트가 왔을 때,

4이상인 숫자가 4개 있기 때문에 return으로 5가 아닌 4를 해줘야하기 때문이다.

 

 

def solution(citations):
    citations.sort(reverse = True)
    stack = []
    cnt = 0
    for i in citations:
        if i >= cnt:  # 값이 카운트보다 클 때 추가
            cnt += 1  # [8,7,6,5,0]일 때, [5]가 오면 cnt = 4이므로
            stack.append(i) 
        else:
            break
    return cnt  # return 은 4가 된다

이렇게 했더니 또 11번 16번 케이스에서 실패가 나왔다.

테스트 케이스를 추가할 때, 중복값을 염두해봤다. [ 1,1,1,1,2 ] 리스트가 주어졌을 때, i >= cnt 에서 i=1, cnt=1 이 되어 return을 2로 해버린다. 하지만 return이 1이 되어야 하므로 > 로 변경해줘야 한다.

 

 

def solution(citations):
    citations.sort(reverse = True)
    stack = []
    cnt = 0
    for i in citations:
        if i > cnt:   # 조건 변경
            cnt += 1
            stack.append(i)
        else:
            break
    return cnt

해결했다

 

출처

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90