이숭간 공부기록
[프로그래머스] 파이썬 _ H-Index 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/42747
문제유형 : 정렬, 구현
문제풀이 :
- h의 최댓값은 n이다.
- n부터 하나씩 내려가면서 조건에 맞는 값을 찾다가 처음으로 찾는값이 h의 최댓값이므로 해당값을 반환한다.
- 조건1(h번 인용된것이 h개 이상) 을 만족하는것을 찾으면, 그 개수가 inyong개 라고할때 자동으로 남은 것(전체-inyong개)들은 h보다 작게 되므로 굳이 남은값들의 인용된 횟수가 h보다 작은지 확인하지 않아도 됨
실수했던것 :
for문안에서 for루프의 대상이 되고있는 리스트의 원소를 pop하면 안된다!!!!!!!! (바보같다)
나는 남은값들도 한번더 확인해야 된다고 생각해서 h번 인용된 값들을 리스트에서 빼주고, 남은 원소들을 다시한번 확인해야 한다고 생각해서 for안에서 pop을 했더니 6,5,3,1,0 을 돌아야하는데 6,3,1 이렇게 됨
정답코드
# n편중 h번 인용된 논문이 h편 이상
# 나머지논문 (n-h)편들이 h번 이하 인용되었다면, h의 최댓값이 답
def solution(citations):
n = len(citations)
# i - h
citations.sort(reverse=True)
for i in range(n, -1, -1):
inyong = 0
citations_ = citations.copy()
# n회 이상 인용된것들을 찾기
for a, b in enumerate(citations_):
if (b >= i):
inyong += 1
if (inyong < i):
continue # 5->4
if (len(citations_)-inyong <= i):
return i
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 파이썬 _ 베스트앨범 (0) | 2021.06.16 |
---|---|
[프로그래머스] 파이썬 _주식가격 (0) | 2021.06.15 |
[프로그래머스] 파이썬 _ 가장 큰수 (2) | 2021.06.05 |
[프로그래머스] 파이썬 _ 여행경로 (0) | 2021.06.03 |
[프로그래머스] 파이썬 _ 단어변환 ⭕️ (0) | 2021.05.29 |