사용 언어 - Python3
문제 - H-Index
정답
인덱스와 값 비교 정렬 문제 (정답 맞춘 여부 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
레퍼런스
- 깃허브 정답
'Algorithm > 정렬' 카테고리의 다른 글
[백준] 24060번 알고리즘 수업 - 병합 정렬 1 (0) | 2023.01.31 |
---|---|
[프로그래머스 lv 2] 가장 큰 수 (0) | 2023.01.27 |
[프로그래머스 lv 1] K번째수 (0) | 2023.01.27 |
댓글