싱싱미역상태

프로그래머스-H-Index 본문

SW

프로그래머스-H-Index

crossfit_wod 2024. 12. 1. 15:16

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42747#

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

나의 풀이(실패, 테스트케이스 1개 오류)

어떤 부분에서 틀렸는지 감도 안 잡힌다. 처음 문제 풀 때, 문제를 잘 못 이해를 해서 이상하게 풀고...

 

# 5편 논문 중에서 2번이상 인용된 논문이 2개 이상 -> 3개
# 5편 논문 중에서 3번이상 인용된 논문이 3개 이상 -> 3
# 5편 논문 중에서 4번이상 인용된 논문이 4개 이상 -> X
# 최종은 인덱스를 구하는 것
def solution(citations):
    answer = 0
    citations.sort(reverse=True) 
    # [6, 5, 3, 1, 0]
    # [0, 1, 2, 3, 4]
    # n = 0인 경우, 0 <= n: 5, n <= 0: 1, 작은 경우가 해당하지 않아 오류
    # n = 1인 경우, 1 <= n: 4, n <= 1: 2, 작은 경우가 해당하지 않아 오류
    # n = 2인 경우, 2 <= n: 3, n <= 2: 2, 해당 HINDEX
    # n = 3인 경우, 3 <= n: 3, n <= 3: 3, 해당 HINDEX (큰 인덱스)
    # n = 4인 경우, 4 <= n: 2, n <= 4: 3, 큰 경우가 해당하지 않아 오류
    overCount = 0
    lowCount = 0
    for tempHIndex in range(len(citations)):
        for j in range(len(citations)):
            if citations[j] > tempHIndex:
                overCount += 1
            elif citations[j] == tempHIndex:
                overCount += 1
                lowCount += 1
            else:
                lowCount += 1
        
        # 해당하는 경우
        if tempHIndex <= overCount and lowCount <= tempHIndex:
            answer = max(answer, tempHIndex)
        overCount = 0
        lowCount = 0
    
    return answer

다른 사람 풀이

어차피 H-index는 0부터 시작할 수 없기 때문에, 1 ~ 5로 범위를 지정해야한다. 그리고 나머지는 조건에 맞게 필터링한다.

근데 왜 조건을 1개만 처리하지... 아직도 이해가 잘 안가는 문제

계속 풀어봐야겠다.

def solution(citations):
    answer = 0
    citations.sort()
    
    for tempHIndex in range(1, len(citations) + 1): # 1 ~ 5
        overCount = 0
        for c in citations: # [0, 1, 3, 5, 6]
            if c >= tempHIndex:
                overCount += 1
        
        if tempHIndex <= overCount:
            answer = max(answer, tempHIndex)
    
    return answer