문제: https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
k(=h) | s | ≥ k(=h) |
1번 이상인 논문이 | 4편 | ≥ 1 |
2번 이상인 논문이 | 3편 | ≥ 2 |
3번 이상인 논문이 | 3편 | ≥ 3 |
4번 이상인 논문이 | 2편 | < 4 |
5번 이상인 논문이 | 2편 | < 5 |
- k(=h)가 s 초과일 때 종료, 이전 k값이 h-index이다.
코드 1 (실패)
def solution(citations):
n = len(citations)
ans = []
s=0
h = [i+1 for i in range(n)]
for k in h:
s=0
for i in citations:
if i >= k:
s+=1
if s<k:
return k-1
break
k 1 1 1 1 1
i 3 0 6 1 5 i >= k일 때, s = 4
k 2 2 2 2 2
i 3 0 6 1 5 i >= k일 때, s = 3
k 3 3 3 3 3
i 3 0 6 1 5 i >= k일 때, s = 3
k 4 4 4 4 4
i 3 0 6 1 5 i >= k일 때, s = 2
k 5 5 5 5 5
i 3 0 6 1 5 i >= k일 때, s = 2
코드 1의 반례
- citations = [100,100,100]인 경우에 s ≥ k인 상태로 끝나 빈 리스트만 출력된다.
코드 2 (성공)
def solution(citations):
n = len(citations)
ans = []
s=0
h = [i+1 for i in range(n)]
for k in h:
s=0
for i in citations:
if i >= k:
s+=1
if s<k:
ans.append(k-1)
break
else: # 위의 반례를 방지하기 위해 추가.
ans.append(k)
return ans[-1] # 반례의 경우에는 k가 계속 추가되다가 끝나기에 마지막 값을 출력
'Coding Test > Sorting' 카테고리의 다른 글
[Sorting] 가장 큰 수 (0) | 2024.06.13 |
---|---|
[Sorting] K번째 수 (0) | 2024.06.13 |
Sorting 개념 (0) | 2024.06.13 |