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