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가 곧 인덱스...이므로 인덱스로 간단하게 풀이가 가능...!!!! 신기방기

반응형