H-Index(programmers 문제) python 풀이

Jipoleon·2021년 5월 27일
0

programmers

목록 보기
6/9
post-thumbnail

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42747

먼저, 인풋으로 각각의 쓴 논문의 인용 횟수가 들어있는 list인 citations이 주어진다.
이때, 논문 n편 중 h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다. 이 H-Index를 찾아 리턴하는 것이 목적이다.

내 풀이

def solution(citations):
	# 인용 수의 최댓값이 0이면 바로 0을 리턴
    if max(citations) == 0:
        return 0
    # 내림차순으로 정렬
    citations.sort(reverse=True)
    for length in range(len(citations)+1, 1, -1):
        check = 0
        for cit in citations:
            if cit >= length:
                check += 1
                if check == length:
                    return check
            else:
                break

먼저, 주어진 배열의 max값이 0이면 그냥 바로 0을 리턴해준다.
그렇지 않는 경우 sort + reverse로 내림차순 정렬을 해준다.
내림차순된 배열의 길이로 for문을 1씩 줄어드는 방향으로 돌리고, 그 안에 그냥 내림차순된 배열로 for문을 돌려 총 이중 for문을 만들어준다.

그리고 check로 인용수가 h편 이상인 논문이 발견될 시 +1을 해주어 갯수가 h가 되면 리턴을 해준다.

결과

다른 사람 풀이

def solution(citations):
  sorted_citations = sorted(citations, reverse=True)
  for i in range(len(sorted_citations)):
    if sorted_citations[i] <= i: 
      return i
  return len(sorted_citations)

다른 사람의 풀이를 보니 굳이 이중 for문과 check를 만들지 않고, 내림차순으로 정렬되어 있기 때문에 i번째까지만 확인 후 리턴해주는 방식을 사용하였다.

결과

코드가 짧아졌을 뿐만 아니라 시간 효율성도 더 좋아졌다.

profile
I Love AI

0개의 댓글