[프로그래머스] [Python] Level_2 H-Index
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번 빼고 다 실패했다.