차차로그
[JS] 정렬 > H-Index 본문
문제가 난해하고 테스트케이스도 하나밖에 없어서 너무 헷갈렸던 문제.
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;
}
이 분도 인덱스를 활용해서 답을 구했다.
'코딩테스트' 카테고리의 다른 글
[JS] 해시 > 위장 (0) | 2022.09.21 |
---|---|
[JS] 힙(Heap) > 이중우선순위큐 (0) | 2022.09.21 |
[JS] 연습문제 > 행렬의 곱셈 (0) | 2022.09.16 |
[JS] 연습문제 > 최고의 집합 (0) | 2022.09.16 |
[JS] 2018 KAKAO BLIND RECRUITMENT > [1차] 캐시 (0) | 2022.09.15 |
Comments