본문 바로가기
Algorithm/정렬

[프로그래머스 lv 2] H-Index

by HANNI하니 2023. 1. 27.

사용 언어 - Python3

문제 - H-Index

 

프로그래머스

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

programmers.co.kr

 

 

정답

인덱스와 값 비교 정렬 문제 (정답 맞춘 여부 X)

내 정답은 테스트11,16에서 실패가 나왔다.. 근데 그 이유를 못찾았다.ㅠㅠ

def solution(citations):
    for i in range(max(citations)): # i 인용 횟수
        answer = 0 
        for c in citations:
            if c >= i: # 해당 논문이 인용 횟수 이상인 경우
                answer += 1 # 논문 개수 세기
            
        if answer == i: #3편의 논문이 3회 이상 인용
            return answer

 

정답 풀이

1. citations을 오름차순 정렬했다.

2.  l-i 남아있는 논문수

l-i는 i가 한개씩 증가하면서 5, 4, 3, 2, 1 로 줄어든다. (총 논문 수가 5인 경우)

 

테스트케이스를 예로 들면) citations = [0,1,3,5,6]

i = 0, citaitons[i] =0 >= l-i=5 만족안함 

=> 논문1이 0번 인용된 경우, 남아있는 총 5편이 5보다 같거나 크지 않다.

i = 1, citaitons[i] =1 >= l-i=4 만족안함

=> 논문2가 1번 인용된 경우, 남아있는 총 4편이 4보다 같거나 크지 않다.

i = 2, citaitons[i] =3 >= l-i=3 만족

=> 논문3가 3번 인용된 경우, 남아있는 총 3편이 3보다 같거나 크다. 정답 return!

 

[사고의 흐름을 바꾼 방식]  <- 정답 댓글에서 가져왔습니다.

문제) h번 이상 인용이 몇편인가? -> 논문 편수가 h이상인가?

정답) 지금 논문 몇 편이 남아있는가? -> 모든 인용횟수가 이 값보다 큰가? 가장 작은 값이 이 값보다 큰가?

 

남아있는 논문들만을 생각할 수 있는 이유는 citations을 오름차순 했기 때문이다.

3보다 이상 인용된 논문을 찾으려면, 3보다 뒤에 남아있는 더 큰 숫자들만 고려하면 된다.

3번 인용된 논문3을 테스트할 때, 논문3,4,5번째(총 논문 3개)가 다 인용횟수 3 이상인지 확인하는 것이다.

 

3. 모든 citations을 검사한 경우에도 정답을 못 구했다면 0을 return 한다.

# 다른 사람의 풀이
def solution(citations):
    citations = sorted(citations)
    l = len(citations)
    for i in range(l):
        if citations[i] >= l-i:
            return l-i
    return 0

댓글