[알고리즘] 프로그래머스 - H-Index

do_large·2021년 1월 14일
0

알고리즘

목록 보기
35/50
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/42747\

문제설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

입출력 예

풀이방법
1. 배열을 내림차순으로 정리해준다(오름차순으로 해줘도 상관없음. 그냥 몇 부분만 더 수정해주면 됨)
2. for문을 돌리면서 배열의 뒷부분 부터 검사해 준다.
3. i+1과 배열의 i번째 값을 비교 해, 배열의 i 번째 값이 더크면 i번 인덱스 보다 앞에있는 값들도 i+1보다 더 크므로 i+1을 반환해준다!

function solution(citations) {
    citations.sort((a,b)=>b-a);
    for(let i = citations.length-1; i >= 0 ; i--){
       if(citations[i] >= i+1){
           return i+1;
       }
    }
    return 0;
}

고민했던 점
처음엔 정렬을 사용하지 않고 풀었는데, 이렇게 푸니깐 2중 for문을 사용해야하고 코드도 깔끔해 보이지 않았다.

그래서 for문을 돌리기 전에 일단 배열을 정렬해주니, 값을 순차적으로 검사하면 되기때문에 for문을 한번만 돌려도 정답을 찾을수 있었다!

언제 정렬이 필요한지, 필요없는지 판단할 수 있을때까지 계속 문제를 많이 풀자...ㅠㅜ

0개의 댓글