💡 Codeing Test/프로그래머스

[프로그래머스] h-Index (python)

밈98 2023. 2. 5. 20:46
문제

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

 

프로그래머스

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

programmers.co.kr

문제 해석

https://www.ibric.org/myboard/read.php?Board=news&id=270333 

 

[연구논문을 위한 핵심 10단계] H-지수(H-Index) 란 무엇인가?

일반적으로 특정 연구원의 연구성과를 평가하기 위해 얼마나 많은 논문을 발표 하였는지를 보게됩니다. 그러나 단순히 발표한 논문 수로만 그 연구원의 연구 업적을 평가 하기에는 발표한 논문

www.ibric.org

이 링크를 참조하고 읽어보는것이 좋다

 

문제풀이
def solution(citations):
    citations.sort()
    cnt=0
    for i in range(len(citations)):
        if len(citations)-i <= citations[i]:
            cnt+=1
    return cnt

설명:
논문을 내림차순으로 정렬한다. -> 순서대로 논문과 h-index값을 찾기위해서
이후 cnt (값을 세는 변수)를 0으로 초기화해준다
for문을 돌린다 (0~논문개수까지)
정렬된 [0,1,3,5,6] 
len(citations)-i = h 라 하면,
h = 5 , citiation[0]= 0 
h = 4 , citiation[1]= 1
h = 3,  citiation[2]= 3 cnt =1
h = 2 , citiation[1]= 5 cnt = 2
h = 1,  citiation[2]= 6 cnt =3
h 가 3일때 h-index값을 알아낼 수 있다
결국 이 풀이는 적합한 값이 나올때까지 값을 누적해야하므로 답이 3이나온다.

다른테스트케이스
[8,7,7,6,5,5,3] 답: 5

내 방식대로 내림차순 정렬
[3,5,5,6,7,7,8] 
h = 7 , citiation[0]= 3
h = 6 , citiation[1]= 5
h = 5,  citiation[2]= 5 cnt = 1
h = 4, citiations[3] = 6 cnt= 2
h = 3, citiations[4] = 7 cnt= 3
h = 2, citiations[5] = 7 cnt = 4
h = 1, citiations[6] = 8 cnt = 5

 

더 좋은 다른 풀이
def solution(citations):
    citations.sort(reverse=True)
    for idx, i in enumerate(citations):
        if i <= idx:
            return idx
            break
    return len(citations)