https://school.programmers.co.kr/learn/courses/30/lessons/42747#qna
나의 풀이
function solution(citations) {
let result = 0
for(i = 1; i<=Math.max(...citations); i++) if(i <= citations.filter(citation=>citation >= i).length) result = i
return result
}
처음에 문제이해를 잘 못해서 11번 케이스만 틀렸다.
"논문 n편 중, h번 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-index입니다. "
이렇게 이해했다.
하지만 문제에서는 h번 "이상" 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인욘되었다면 h의 최댓값이 이 과학자의 H-index입니다.
따라서 [ 0 , 1, 1] 이라면 return이 1이어야 한다.
왜냐하면 논문 3편 중, 1번 이상 인용된 논문이 1편 이상이고~~~ 이기때문이다.
코드는 filter을 통해서 i보다 큰것만 골른후 그것의 배열의 길이가 i와 같거나 작으면 result = i 가 되게하였다.
이렇게 계속 for문을 돌리면 최댓값이 result가 되어 마지막에 return 하게 된다.
단 i = 1부터 citations배열에 최댓값까지 for문이 진행되기에 효율성이 별로이다.
문제풀면서 실수했던점
1. Math.max는 배열은 받지 않기에 ... 을 붙여줘야한다.
2. reduce는 원본배열을 변환시키지 않는다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스 - JS] level.2 n^2 배열 자르기 (0) | 2022.10.17 |
---|---|
[프로그래머스] level.2 괄호 회전하기 {stack}(**) 다른사람 풀이 너무 좋음 (0) | 2022.10.13 |
[프로그래머스] level.2 행렬의 곱셈 (0) | 2022.10.11 |
[프로그래머스] level.2 [1차] 캐시 (0) | 2022.10.06 |
[프로그래머스] level.2 점프와 순간 이동 (0) | 2022.10.06 |