※ 문제 오류
"나머지 논문이 h회 이하로 인용되어야 한다."라는 조건이 실제 풀이에서는 고려되지 않았다. "h회 이상 인용된 논문이 h개 이상"이라는 전제만 생각해야 풀 수 있다.
def solution(citations):
answer = 0
citations.sort(reverse=True)
for index in range(len(citations)):
if citations[index] >= index + 1:
answer = index + 1
return answer
내림 차순으로 배열을 정렬하여 인용 횟수는 citations[index]로, 횟수 이하로 인용된 논문의 갯수는 정렬된 배열의 index(+1)로 구해 풀이했다.
다른 사람의 풀이
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
내 풀이에서 인용 횟수와, 횟수 이하로 인용된 논문의 갯수를 구하는 방식은 동일하다.
다만 이를 enumerate를 사용하여 (인용 횟수, 논문의 갯수)의 객체로 묶고 map과 min함수를 통해 둘 중 더 작은 값을 골라 배열로 만든다.
여기에서 더 작은 값을 골라 묶는 이유가 궁금했는데, 실제로 작은 값만을 고르게 되면 배열 초반에는 인용된 논문갯수, 그리고 중반 이후부터는 인용 횟수가 나타나고 이 값이 역전되는 지점에서 문제의 조건을 만족하면서 값이 가장 큰 수가 나타나게 된다.
마지막으로 max를 통해 위 값을 추출한다.
다만 시간 복잡도 면에서는 전자의 풀이가 더 빨랐다.
참조
'Algorithm' 카테고리의 다른 글
[Programmers] 136798.py 기사단원의 무기 (0) | 2023.07.03 |
---|---|
[Programmers] 12985.py 예상 대진표 (0) | 2023.07.02 |
[Programmers] 181834.py l로 만들기 (0) | 2023.06.23 |
[Programmers] 120910.py 세균 증식 (0) | 2023.06.22 |
[Programmers] 176963.py 추억 점수 (0) | 2023.06.11 |