Level 2 210921 https://programmers.co.kr/learn/courses/30/lessons/42747
๊ณผ๊ฑฐ ๋ด ํ์ด
function solution(citations) {
var answer = 0;
// 0 1 3 5 6
// ๋บ์
์ฐ์ฐ ํจ์๋ฅผ ์ธ์๋ก ๋๊ฒจ ํฌ๊ธฐ๋น๊ต๋ฅผ ํ์ฌ ๋ฆฌํด๋๋ ๊ฐ์ ์์, ์์๋ฅผ ํตํด ์์น๋ฅผ ํ๋จํ๊ฒ ํ
citations.sort(function (f, s) {
return f - s;
});
// nํธ ์ค h๋ฒ ์ด์ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ด hํธ ์ด์ ์ผ๋ h์ ์ต๋๊ฐ์ด h-index
var h;
for (var i = 0; i < citations.length; i++) {
// i์ผ๋ ๊ฐ์ฅ ํฐ h๊ฐ(๋
ผ๋ฌธ ํธ์)
h = citations.length - i;
// ๋
ผ๋ฌธ ์ธ์ฉํ์๊ฐ h ์ด์์ธ์ง ํ์ธ
if (citations[i] >= h) {
answer = h;
break;
}
}
return answer;
}
๋ฌธ์ ์ค๋ช
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ํ ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
์ ์ถ๋ ฅ ์ ์ค๋ช
์ด ๊ณผํ์๊ฐ ๋ฐํํ ๋
ผ๋ฌธ์ ์๋ 5ํธ์ด๊ณ , ๊ทธ์ค 3ํธ์ ๋
ผ๋ฌธ์ 3ํ ์ด์ ์ธ์ฉ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง 2ํธ์ ๋
ผ๋ฌธ์ 3ํ ์ดํ ์ธ์ฉ๋์๊ธฐ ๋๋ฌธ์ ์ด ๊ณผํ์์ H-Index๋ 3์
๋๋ค.
ย
My solution
h๋ฒ ์ด์ ์ธ์ฉ๋ ๊ฒ์ด h๊ฐ์ง ์ด์์ธ ๊ฒฝ์ฐ h๋ฅผ ์ฆ๊ฐ์ํจ๋ค. ํ์ง๋ง ์ด ์์ ์ ์ํด ๋งค ์ธ๋ฑ์ค๋ง๋ค ๋ฐฐ์ด ์ ์ฒด๋ฅผ ํ์ํด์ ํ์ธํด์ผ ํ๋ค๋ ์ ์ด ์ฑ๋ฅ์ ๋ถ๋ฆฌํ๋ค.
3 0 6 1 5
0๋ฒ ์ด์ ์ธ์ฉ : ์ ๋ถ ์ฑ๋ฆฝ
1๋ฒ ์ด์ ์ธ์ฉ : 3 6 1 5 (4๊ฐ์ง)
2๋ฒ ์ด์ ์ธ์ฉ : 3 6 5 (3๊ฐ์ง)
3๋ฒ ์ด์ ์ธ์ฉ : 3 6 5 (3๊ฐ์ง) ...
ย
๋ฐ๋ผ์ citations ๋ฐฐ์ด์ ์ ๋ ฌํด๋ณธ๋ค. ๊ทธ๋์ผ ๊ธฐ์ค์ ๋ฒ์ด๋ฌ์ ๋ ๋ค์ ๊ฐ์ ๊ณ์ฐํ ํ์๊ฐ ์์ด์ง๋ค. [0, 1, 3, 5, 6] ์ด๋ฌํ ๋ฐฐ์ด์ด ๋๋ฉด h๊ฐ์ ๊ตฌํ๋ ๊ฒ์ ํจ์ฌ ๋นจ๋ผ์ง๋ค.
์๋ฅผ ๋ค์ด, 3๋ฒ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ด ์์ผ๋ฉด ๊ทธ ๊ฐ์ด ๋ํ๋ ์ธ๋ฑ์ค ๋ค๋ก๋ ๋ฐ๋์ 3๋ฒ ์ด์ ์ธ์ฉ๋ ๋
ผ๋ฌธ๋ง ์กด์ฌํ ๊ฒ์ด๋ฏ๋ก "๋ฐฐ์ด์ ๊ธธ์ด์์ 3๋ฒ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ๋นผ์ฃผ๋ฉด" 3๋ฒ ์ด์ ์ธ์ฉ๋ ๋
ผ๋ฌธ์ ์ด ๊ฐ์๋ฅผ ๊ตฌํ ์ ์์์ ์ ์ ์๋ค.
์ฆ for๋ฌธ ๋ด์ ์์ ๋ณ์๋ฅผ ๋๊ณ "๋จ์ ๋
ผ๋ฌธ ๊ฐ์"๋ฅผ ์ค์ ํ์ฌ ์ค์ฌ๊ฐ๋ฉด์ ๊ทธ ๊ฐ์๊ฐ ์ต๋๊ฐ ๋๋ ค๋ฉด ์ธ์ฉ ํ์๊ฐ ๋จ์ ๋
ผ๋ฌธ ๊ฐ์์ ๊ฐ๊ฑฐ๋ ์ปค์ง๋ ์๊ฐ ๋ฉ์ถฐ์ผํ๋ค.
๋ฐฐ์ด์๋ ์ธ์ฉํ์๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ ๋จ์ ๋
ผ๋ฌธ ๊ฐ์๋ ๋ฐ๋ณตํ ๋๋ง๋ค 1๊ฐ์ฉ ์ค์ด๋ค ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋จ์ ๋
ผ๋ฌธ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก h ์ธ๋ฑ์ค๊ฐ ์ฑ๋ฆฝ๋๋ ์๊ฐ h๋ฅผ ๋ฆฌํดํ๋ค.
ย
์ ์ํด์ผํ ๊ฒ์ if(h โค citations[i])) ์ ์กฐ๊ฑด๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์๋ ํ
์คํธ์ผ์ด์ค์ธ๋ฐ ์๋์ฒ๋ผ [0]์ด๋ [0,0,0]์ธ ๊ฒฝ์ฐ h๊ฐ 1์ด์์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ h๊ฐ์ด ๋ฆฌํด๋์ง ์์ผ๋ฏ๋ก answer๋ฅผ 0์ผ๋ก ํ ๋นํด์ฃผ๋ฉด ๋๋ค.
์์ค ์ฝ๋
function solution(citations) {
let answer = 0;
citations.sort((a, b) => a - b);
for (let i = 0; i < citations.length; i++) {
let h = citations.length - i;
if (h <= citations[i]) return h; // ๋จ์ ์ธ
}
return answer;
}
test("solution", () => {
// expect(solution([3, 0, 6, 1, 5])).toBe(3);
// expect(solution([88, 89])).toBe(2);
// expect(solution([3])).toBe(1);
// expect(solution([1])).toBe(1);
expect(solution([0])).toBe(0);
expect(solution([0, 0, 0])).toBe(0);
});
ย
ย
ย
ย
ย
ย