[프로그래머스] Lv2 - H-Index

김멉덥·2023년 8월 30일
0

알고리즘 공부

목록 보기
92/171
post-thumbnail
post-custom-banner

문제

프로그래머스 코딩테스트 고득점 Kit - 정렬


코드 구현

def solution(citations):
    answer = 0

    # n편 중 h번 이상 인용된 논문이 h편 이상, h의 최댓값 구하기

    citations = sorted(citations)
    h = []

    for i in range(len(citations)):
        c_more = 0      # citations[i] 이상 인용된 논문의 개수를 담을 변수

        # citations[i]번 이상 인용된 논문의 개수 세기
        # for j in citations:
        #     if(j >= citations[i]):
        #         c_more += 1
        c_more = len(citations[i:])

        if(c_more >= citations[i]):     # citations[i]번 이상 인용된 논문이 citations[i]편 이상일 때
            h.append(citations[i])      # -> h는 citations[i]
        else:                           # citations[i]번 이상 인용된 논문이 citations[i]편 이하일 때
            h.append(c_more)            # -> h는 c_more

    answer = max(h)     # 이런 모든 h들 중 최댓값이 정답

    return answer

# solution([7,7,7,7,3])

풀이

  • 문제 설명이 다소 애매해서 조금 해맸었다…!
  • 논문들이 인용된 횟수를 담은 배열 citations 에서 h번 이상 인용된 논문이 **h편 이상일 때와** 이하일 때h값이 다르기 때문에 이에 대한 구분이 필요하다.
  • 논문 c가 h번 이상 인용된게 h편 이상이라면 → h = 논문 c의 인용횟수
  • 논문 c가 h번 이상 인용된게 h편 이하라면 → h = 논문 c 이상 인용된 논문의 개수
  • 처음에는 논문의 개수를 세는 부분에서 for문을 안에 하나 더 대입하여 세었는데 이러면 정렬한 의미가 없기 때문에 수정하였다.
    • citations[i] 이상 인용된 논문의 개수를 담는 c_more를 정렬하였으니 len(citations[i:]) 로 정의해버리는 것이다.
    • 이렇게 되면 같은 숫자가 여러개 들어가있는 배열은 어떻게 처리하나 싶었는데 어차피 최대값을 구하는 것이니 상관없다 !!!
      • ex) citations = [7,7,7,73] → 정렬 후 = [3,7,7,7,7]
      • 3의 경우, c_more = 5 → 이는 3 이상 이므로 → h 배열에 들어가는 수 = 3
        첫번째 7의 경우, c_more = 4 → 이는 7 이하 이므로 → h 배열에 들어가는 수 = 4
        두번째 7의 경우, c_more = 3 → 이는 7 이하 이므로 → h 배열에 들어가는 수 = 3

        이렇게 되지만, 어차피 최댓값을 구하면 장땡이니까 첫번째 7의 값에서 끝남 !

profile
데굴데굴 뚝딱뚝딱 개발기록
post-custom-banner

0개의 댓글