프로그래머스_H-Index

임정민·2023년 9월 25일
1

알고리즘 문제풀이

목록 보기
110/173
post-thumbnail

프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 15분 소요


def solution(citations):
    answer = 0
    citations.sort()

    for i in range(0,citations[-1]+1):
        over = 0
        under = 0
        for c in citations:
            if c==i:
                over += 1
                under += 1
            if c>i:
                over += 1
            elif c<i:
                under += 1
        if over>=i and i>=under:
            if i>answer:
                answer = i
    return answer

입력된 논문 인용 횟수 리스트에서 h번 인용된 논문이 h이상이고 인용되지 않은 논문의 h이하인 최댓값을 찾는 문제입니다. 인용 횟수 리스트를 정렬하고 순차적으로 인용 횟수의 최소~최대값을 돌며 이상/이하 조건을 탐색하여 해결하였습니다.🐰🐰🐰

[다른 사람의 풀이1]


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의 최댓값이기 때문에 인용 비교 기준의 최댓값을 우선으로 인용 횟수와 인용 비교 기준을 순회하며 찾아가는 방식입니다.

[다른 사람의 풀이2]


def solution(citations):
    answer = 0
    citations.sort(reverse=True)
    
    for i in range(len(citations)):              # H_index가 존재하고 H_index를 넘는 논문이 몇 개인지 구할때
        if(citations[i] < i+1):
            return i

    return len(citations)   

마찬가지로 인용 횟수 리스트를 내림차순으로 정렬하고 인용 횟수 기준과 인용횟수를 비교하는 방식입니다. 여기서 [5,5,5,5]와 같이 동일한 인용 횟수가 나열되어 있을 때의 예외를 처리하기 위해
len(citations)으로 표현해주었습니다.🐹🐹🐹

감사합니다.

profile
https://github.com/min731

0개의 댓글