일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 2606
- 백준_2178
- 백준 9252
- 알고리즘
- 9663
- BOJ 2606
- BFS
- LCS2
- 12865
- dfs
- 대소비교
- 냅색
- 미로탐색
- 리스트
- 백준
- python
- 프로그래머스
- 증가하는 부분수열 2
- 백준 12015
- 가장 긴 증가하는 부분수열
- boj 11053
- 백준 2606
- 소수찾기
- 파이썬
- 백준 1535
- 8-queen
- 타겟 넘버
- list
- 평범한 배낭
- 데카르트 곱
- Today
- Total
Devlog_by_0giru
[프로그래머스] H-index 본문
https://programmers.co.kr/learn/courses/30/lessons/42747#
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
프로그래머스 문제는 종종 문제 자체가 이해가 잘 되지 않는 경우가 많다. 아직 레벨2 따리지만...
논문의 인용 수 h를 norm(기준이라는 뜻)이라는 변수로 지정하고 0으로 초기화 한뒤 1씩 올려가는 while 반복을 통해 norm 이상으로 인용된 논문 수를 구하는 방식으로 구했다.
문제의 포인트는 h번 이상 인용된 논문의 개수가 h개 이상 일 때 h의 최댓값이라는 문장의 의미를 잘 이해하는 것이다.
이 부분을 자세히 생각해 보지 않고 문제를 풀어 h번 인용된 논문 개수가 h개 일때로 이해하고 잘못 풀었다.
제시된 테스트 케이스도 [3, 0, 6, 1, 5]로, h를 3으로 잡았을 때 그 결과가 3이 나와 꼭 맞게 되어 이렇게 착각했는데, 아마도 이를 이용해서 일부러 이런 테케를 주지 않았나 싶다...
이 문제를 풀 때에는 주어진 테케와 아래 두 가지 테스트 케이스를 추가로 고려해보면 쉽게 풀수가 있는다.
[0, 0, 0] / 0
[0, 1, 2] / 1
(모두 해당 문제 질문하기에 올라온 다른 사람들의 질문에서 알 수 있었다.)
첫번째 테스트 케이스의 경우 단순히 기준인 0보다 크거나 같다고 잡으면 리턴값은 3이 되어 무한 루프에 빠지게 된다.
두번째 테스트 케이스의 경우 norm이 0부터 시작하여 norm 이상의 논문 수를 계속 구하게 되면 norm과 개수가 일치하지 않고 엇갈리게 되어 마찬가지로 무한루프에 빠진다.
제시된 테스트 케이스와 두가지 테스트 케이스의 동작을 직접 써보았는데,
0 1 2 / 1
norm 0 count 3 continue
norm 1 count 2 continue
norm 2 count 1 continue
norm 3 count 0 continue
norm 4 count 0 continue
...
0 0 0 / 0
norm 0 count 3 continue
norm 1 count 0 continue
norm 2 count 0 continue
...
3 0 6 1 5 / 3
norm 0 count 5 continue
norm 1 count 4 continue
norm 2 count 3 continue
norm 3 count 3 continue
norm 4 count 2 continue
...
요렇게 진행이 된다.
앞서 말했던 것과 같이 제시된 테스트 케이스는 norm 3, count 3으로 숫자가 꼭 맞게되어 최댓값이 3이 되지만 위 두 케이스는 그렇지 않기 때문에, 최댓값을 구하려면 norm이 count보다 작거나 같을 때 가장 큰 값을 리턴해야 한다.
처음에 같을 때만 리턴하는 코드를 제출했을 때도 테케는 당연히 맞았고, 대부분의 효율성 검사에서도 맞아 맞는 코드를 작성했다고 생각했는데... 아직 많이 멀었다.
def solution(citations):
norm = 0
count = 0
while True:
for cit in citations:
if cit >= norm:
count += 1
if count == norm:
break
if count < norm:
norm -= 1
break
else:
norm += 1
count = 0
continue
return norm
'[PS]' 카테고리의 다른 글
[boj] N-Queen (1) | 2021.06.21 |
---|---|
[프로그래머스] 주식 가격 (0) | 2021.05.28 |
[프로그래머스] 프린터 (0) | 2021.05.25 |
[프로그래머스] 카펫 (0) | 2021.05.14 |
[프로그래머스] 타겟 넘버 (0) | 2021.04.20 |