H-Index

๊ณผ๊ฑฐ ๋‚ด ํ’€์ด
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);
});
ย 
ย 
ย 
ย 
ย 
ย