Notice
Recent Posts
Recent Comments
«   2025/05   »
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 29 30 31
Tags
more
Today
Total
관리 메뉴

차차로그

[JS] 정렬 > H-Index 본문

코딩테스트

[JS] 정렬 > H-Index

차차한 2022. 9. 16. 15:46

문제가 난해하고 테스트케이스도 하나밖에 없어서 너무 헷갈렸던 문제.

H가 주어진 배열에 있는 값이 아니라 단순 카운트를 한 값이었다.

function solution(citations) { 

    citations.sort((a,b)=>b-a);
    var up = 1;
    
    if(citations.reduce((acc,val)=>acc+val) == 0){
        return 0;
    }
    
    for(var i = 1; i <= citations[0]; i++){
        
        if(citations[i] > i){
            up++;
        }
    }
    return up;
}

먼저 주어진 배열 citations을 내림차순으로 정렬해준다.

그리고 카운트를 할 변수를 1으로 선언, 초기화해준다.

만약에 배열이 [0,0,0]처럼 모든 값이 0이라면 답은 결국 0이 되므로 이러한 조건에선 리턴 0을 해준다. (TC 16번)

배열이 내림차순으로 정렬되어 있기 때문에 0번 인덱스의 값은 가장 인용이 많이 된 횟수다.

배열이 [3, 0, 6, 1, 5]였다면 정렬 후 [6, 5, 3, 1, 0]이 되고 0번 인덱스의 값은 6이 된다.

즉 가장 인용이 많이 된 횟수는 6번이다.

0번 인덱스의 값만큼 반복을 돌려주면서, 배열에 있는 값이 i보다 크다면 카운트를 올려준다.

예를 들어 i가 1이라면 5 > 1이 되어 카운트가 올라가고, 3 > 2여도 카운트가 올라간다.

1 > 3, 0 > 4에는 카운트가 올라가지 않는다.

그렇게 up 변수에는 3이 담기고 이 값을 리턴해주면 된다.

 

+ 일단 풀기는 했지만 정확히 어떤 알고리즘으로 이 답이 나오는지는 모르겠다. ..;

 

다른 사람 풀이

function solution(citations) {
     citations = citations.sort((a,b)=>b-a);
     var i = 0;
     while(i + 1 <= citations[i]){
         i++;
     }
     return i;
}

이 분도 인덱스를 활용해서 답을 구했다.

Comments