https://school.programmers.co.kr/learn/courses/30/lessons/42747
1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 과학자의 H-Index를 return - 주어진 자료는 무엇인가?
- 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations
- 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index - 조건은 무엇인가?
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하
- 논문별 인용 횟수는 0회 이상 10,000회 이하
2. 계획
- citations 배열을 뒤에서부터 순회하면서 i번 이상 인용된 논문의 개수가 i이상이라면 i return
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (citations) => {
// citations 배열을 뒤에서부터 순회하면서 i번 이상 인용된 논문의 개수가 i이상이라면 i return
for (i = citations.length; i >= 0; i--) {
const countDocs = citations.filter((it) => it >= i).length;
if (countDocs >= i) {
return i
}
}
};
test('findHIndex', () => {
expect(solution([3, 0, 6, 1, 5])).toEqual(3);
expect(solution([1, 2, 3])).toEqual(2);
expect(solution([6, 5, 5, 5, 3, 2, 1, 0])).toEqual(4);
expect(solution([10, 10, 10, 10, 10])).toEqual(5);
expect(solution([0, 0, 0, 0, 0])).toEqual(0);
expect(solution([3, 4, 5, 11, 15, 16, 17, 18, 19, 20])).toEqual(7);
expect(solution([3, 0, 6, 1, 5])).toEqual(3);
expect(solution([0, 0, 0, 0, 1])).toEqual(1);
expect(solution([9, 7, 6, 2, 1])).toEqual(3);
expect(solution([1, 1, 5, 7, 6])).toEqual(3);
expect(solution([0])).toEqual(0);
expect(solution([0, 0])).toEqual(0);
expect(solution([0, 1, 2, 3, 3, 3, 3, 3, 3, 4, 10, 20, 30, 40])).toEqual(4);
expect(solution([3, 1, 1, 4])).toEqual(2);
expect(solution([1, 1, 5, 7, 6])).toEqual(3);
expect(solution([1, 3, 5, 7, 9, 11])).toEqual(4);
expect(solution([6, 5, 4, 1, 0])).toEqual(3);
expect(solution([10, 11, 12, 13])).toEqual(4);
});
'코테연습' 카테고리의 다른 글
165. 튜플 Javascript (1) | 2022.09.21 |
---|---|
164. 괄호 회전하기 Javascript (0) | 2022.09.21 |
162. 행렬의 곱셈 Javascript (0) | 2022.09.19 |
161. 파괴되지 않은 건물 Javascript (0) | 2022.09.19 |
160. 주차 요금 계산 Javascript (0) | 2022.09.19 |
댓글