본문 바로가기

학습 노트/알고리즘 (Python)

99클럽 - H-Index, 프로세스

H-Index

 

프로그래머스

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

programmers.co.kr

아이디어

문제 이해가 굉장히 어려웠다.

  • 논문 n 편 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-index이다.

위 H-index의 설명이 문제인 것 같은데 말을 조금 바꿔 보자면

  • n편의 논문 중 A번 이상 인용된 논문의 수가 B라면 A와 B 중 작은 값이 H-index이다.

풀이

def solution(citations):
    citations.sort(reverse=True)
    n = len(citations)
    
    for idx in range(n):
        if citations[idx] <= idx+1:
            return max(citations[idx], idx)
    else:
        return n

이해 됐다면 문제를 푸는 건 간단하다.
인용 횟수를 내림차 정렬하고, 총 논문의 수만큼 반복하면서 해당 논문의 인용 횟수가 자신의 위치보다 큰 마지막 위치를 반환하면 된다.
이때 index는 0부터 시작하고, 권수는 1부터 시작한 다는 점을 유의해서 구현하자.

프로세스

 

프로그래머스

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

programmers.co.kr

아이디어

문제에서 queue를 언급했으니 queue를 사용해 보도록 하자.
다만 일반적인 queue가 아닌 priority(우선도)를 포함하는 tuple을 사용하는 queue다.

풀이

from collections import deque

def solution(priorities, location):
    queue = deque((i, p) for i, p in enumerate(priorities))
    order = 0

    while queue:
        current = queue.popleft()
        
        if any(current[1] < other[1] for other in queue):
            queue.append(current)
        else:
            order += 1
            if current[0] == location:
                return order

문제에서 시키는 대로 그대로 구현하면 된다.

  • queue에서 원소를 하나 빼 온다.
  • 해당 원소보다 우선순위가 높은 원소가 있다면 다시 집어넣는다.
  • 해당 원소보다 우선순위가 높은 원소가 존재하지 않는다면 order를 1 증가시킨다.
  • 실행한 원소가 location과 같은지 확인하고 같다면 order를 반환한다.

'학습 노트 > 알고리즘 (Python)' 카테고리의 다른 글

99클럽 - 역습  (0) 2024.04.26
99클럽 - 선택의 기로  (0) 2024.04.24
99클럽 - 제리와 톰1  (0) 2024.04.22
99클럽 - 행렬 테두리 회전하기  (0) 2024.04.22
99클럽 - 큰 수 만들기  (0) 2024.04.20