두잇 두두 2024. 2. 13. 22:51
728x90

 


문제

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

 

프로그래머스

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

programmers.co.kr

 

 

코드

 

def solution(citations):
    citations.sort(reverse=True)
    h_index= 0
    for i, citationin in enumerate(citations):
        h_index = max(h_index, min(i+1, citationin))
    return h_index

 

 

 

 

다른 사람 코드

 

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

def solution(citations):
    citations = sorted(citations)
    l = len(citations)
    for i in range(l):
        if citations[i] >= l-i:
            return l-i
    return 0

 

 

 

접근법

먼저 H-Index에 대해서 알아야 더 쉽게 풀 수 있는 문제였다

이 문제의 예시를 이용하여 계산하는 방법을 알아보겠습니다. 먼저 [3, 0, 6, 1, 5] 이라는 리스트가 있고, H-Index 계산을 하기 위해서 먼저 내림차순으로 정렬을 해주어야 합니다. 내림차순으로 정렬하면 [6, 5, 3, 1, 0] 의 순서가 됩니다. 여기서 리스트n 번째 값이 최초로 n을 넘지 않을 때, n-1의 값이 H-Index 값이 됩니다. 이것을 표로 나타내면 아래와 같습니다.

https://liveloper-jay.tistory.com/140

 

 

 

 

배운 점

다른 사람 코드에서 enumerate를 start=1을 사용하는 것이 신기했었다

enumrate에서 start=1로 해주면 index 시작은 1이다

for i, v in enumerate(a, start = 1):