Algorithm/1일 1코테
[프로그래머스] H-index
대인보우
2021. 6. 11. 22:19
반응형
https://programmers.co.kr/learn/courses/30/lessons/42747
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
1차풀이
# 카운트 딕셔너리 생성
d = collections.Counter(c)
#정렬
c.sort()
# 본인보다 많이 인용됐으면 딕셔너리에 +1
for i in range(len(c)-1):
for j in range(i+1, len(c)):
if c[i] < c[j]:
d[c[i]] += 1
# [2,2,2,2,2]의 답은 2인데 5가 출력되서 급하게 추가한 로직
if len(d) == 1:
if d[c[0]] >= c[0]:
return c[0]
# key= [0,1,3,5,6] / d[key]=[5,4,3,2,1]라 했을때
# 키가 키의 값보다 같거나 커지는 순간 키의 값 리턴
for key in c:
if key >= d[key]:
return d[key]
else:
return key
위의 코드를 짰으나 너무 비효율적이라 수정
2차풀이
def solution(c):
c.sort()
count = [0] * len(c)
# 인용횟수가 본인보다 이상이면 +1
for i in range(len(c)-1):
for j in range(i, len(c)):
if c[i] <= c[j]:
count[i] += 1
for i in range(len(c)):
if count[i] <= c[i]:
return count[i]
c[i]가 h라고 생각하면 이해하기 쉽다
다른 사람 풀이
def solution(citations):
citations = sorted(citations)
l = len(citations)
for i in range(l):
if citations[i] >= l-i:
return l-i
return 0
count가 곧 인덱스...이므로 인덱스로 간단하게 풀이가 가능...!!!! 신기방기
반응형