Coding Test/programmers

[Python] 파이썬 프로그래머스 H-index

파송송 2023. 2. 10. 12:23
728x90

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

 

프로그래머스

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

programmers.co.kr


나의 풀이

h-index란 특정 연구원의 연구 성과를 평가하기 위해 만들어졌고 인용수와 논문의 개수를 가지고 구할 수 있다.

인용수를 내림차순으로 정렬하고 누적 논문 수와 비교했을 때 논문 수가 인용수보다 작아지기 시작하는 숫자이다.

인용수 Citations 논문 수 
6 1
3 2
2 3
1 4

 

위의 논문에서 h-index는 2이고

이는 논문 인용수가 2가 넘는 논문은 적어도 2개 있다는 뜻이다.

인용수 Citations 논문 수 
6 1
3 2
3 3
1 4

위의 논문에서 h-index는 3이고

이는 논문의 인용수가 3이 넘는 논문은 적어도 3개 있다는 뜻이다.

def solution(citations):
    citations.sort(reverse=True)

    for i, c in enumerate(citations):
        print(i,c)
        if i >= c:
            return i
    return len(citations)


다른 사람의 풀이

def solution(citations):
    citations.sort(reverse=True)
    answer = max(map(min, enumerate(citations, start=1)))
    return answer

다음 식을 풀어서 보면 아래와 같다.

print(list(enumerate(citations, start=1)))
print(list(map(min, enumerate(citations, start=1))))

enumerate를 이용하여 인용수에 index를 합쳐 list를 만들었고 둘 중에 작은 값을 list에 넣는다.

그렇게 했을 때 가장 큰 수는 h-index가 된다.

(x, y) 라고 좌표를 봤을 때 이 둘의 숫자가 모두 큰 값이 나오면서 차가 크지 않는 수를 뽑아낸다는 아이디어를 사용한 것 같다.

728x90