프로그래머스 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)으로 표현해주었습니다.🐹🐹🐹
감사합니다.