Algorithm/프로그래머스

[프로그래머스] [Python] Level_2 H-Index

은세라 2021. 8. 4. 02:34

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

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

1차 시도

장렬히 실패해서 날려버림...

힌트로는 다른 사람들이 써둔 "H-Index는 citations에 없다!" 만 봤는데 이미 안 이후였다... 좀더 확신을 받았을 뿐

citations[i]를 h로 잡고 citations[:i+1]이랑 citations[i+2:]가지고 하다가 운좋게 예시만 맞췄다

2차 시도

def solution(citations):
    citations.sort()
    h = len(citations)
    while True :
        for i, value in enumerate(citations):
            if value >= h and len(citations[i:]) >= h :
                return h
        else :
            h -= 1
            continue
        break

ㅠㅜㅠㅜㅠ그래 이게 내가 원하던거지!!!

어쨋든 h개 이상이 h번, n-h개는 h번 이하에서 1<=h<=n 임을 알았어야했다

💡최종로직

1. 주어진 배열 sort

2. h는 n에서 부터 시작

3. 계속 돌린다

  3-1. citation을 enumerate 돌려서 (index :h를 고를 범위, value :인용 횟수)로 만든다

    3-1-1. 인용 횟수가 h 이상이고, 그 이후 배열 길이가 h 이상이면, h return

    3-1-2. 앞에 조건이 안통하면 h-- (n에서부터 1까지 하나씩 줄인다) continue 다시 for 돌림

 

이중for문을 range 두번 지정할 필요 없이, break continue를 잘 넣어서 구현한 느낌

 

감은 빨리 잡는데 이걸 코드로 구현하다가 맨날 허탈치는 느낌이라 30분 딱 재고 그 안에 못풀면 검색해서 답 보는 방식으로 공부 방법을 바꿨다

 


2021.09.29

 

어쩜 다시 푸는데 또 list안에 h-index없을 수 있는거 또 까먹음

def solution(citations):
    n = len(citations)
    citations.sort()
    # print(citations)
    for i in reversed(range(1,n-1)):
        h = citations[i]
        # print(h)
        # print(citations[0:i], citations[i:])
        if citations[i]>=h and len(citations[i:])>=h and citations[i-1]<=h:
            # print("여기!", h)
            ans = h
            break
    return ans

 

이걸로 테케까지는 통과했는데 이후 테스트는 11번, 16번 빼고 다 실패했다.