Skip to content

H-Indexย #58

@hsskey

Description

@hsskey

๋ฌธ์ œ ์„ค๋ช… | H-Index

์—ฐ๊ตฌ์ž์˜ ๋…ผ๋ฌธ ์ธ์šฉ ์ˆ˜ ๋ฐฐ์—ด citations๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, H-Index๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

H-Index ์ •์˜:

  • ์—ฐ๊ตฌ์ž๊ฐ€ ๋ฐœํ‘œํ•œ ๋…ผ๋ฌธ ์ค‘ h ํŽธ ์ด์ƒ์ด hํšŒ ์ด์ƒ ์ธ์šฉ๋˜์—ˆ์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ h ๊ฐ’ ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

๐Ÿ“ ์ œ์•ฝ์กฐ๊ฑด

  • 1 <= citations.length <= 5000 (๋…ผ๋ฌธ์˜ ๊ฐœ์ˆ˜)
  • 0 <= citations[i] <= 1000 (๊ฐ ๋…ผ๋ฌธ์˜ ์ธ์šฉ ํšŸ์ˆ˜)

๐Ÿ’ก ์˜ˆ์‹œ

Example 1

Input:

citations = [3, 0, 6, 1, 5]

Output:

3

Explanation:

  • ๋…ผ๋ฌธ ์ธ์šฉ ํšŸ์ˆ˜: [3, 0, 6, 1, 5]
  • ์ •๋ ฌ ํ›„: [6, 5, 3, 1, 0]
  • h = 3์ผ ๋•Œ, 3ํŽธ ์ด์ƒ์ด 3ํšŒ ์ด์ƒ ์ธ์šฉ๋จ โ†’ ์ตœ๋Œ€ h-index๋Š” 3

๐Ÿš€ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

Step 1: ๋ฌธ์ œ ์ดํ•ดํ•˜๊ธฐ

์ž‘์€ ์˜ˆ์‹œ๋กœ ์ง์ ‘ ๊ณ„์‚ฐํ•ด๋ณด๊ธฐ

๋…ผ๋ฌธ ๊ฐœ์ˆ˜ ์ธ์šฉ ํšŸ์ˆ˜ ๋ฐฐ์—ด h-index ๊ณ„์‚ฐ
1๊ฐœ [5] 1
2๊ฐœ [4, 5] 2
3๊ฐœ [10, 8, 5] 3
  • ๋…ผ๋ฌธ์˜ ๊ฐœ์ˆ˜๊ฐ€ hํŽธ ์ด์ƒ์ด๊ณ , ๊ฐ ๋…ผ๋ฌธ์ด h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋˜์—ˆ์„ ๋•Œ์˜ h ์ค‘ ์ตœ๋Œ€๊ฐ’์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

Step 2: ์ ‘๊ทผ ๋ฐฉ๋ฒ•

๐Ÿ’ก ์ง๊ด€์ ์ธ ์ ‘๊ทผ๋ฒ• (์™„์ „ํƒ์ƒ‰)

  • ๋ชจ๋“  h์— ๋Œ€ํ•ด ๋…ผ๋ฌธ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ณ  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” h ์ค‘ ์ตœ๋Œ“๊ฐ’ ์ฐพ๊ธฐ โ†’ O(nยฒ) (๋น„ํšจ์œจ์ )

๐Ÿ’ก ์ •๋ ฌ์„ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ• (O(n log n))

  1. ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ โ†’ ์ธ์šฉ ํšŸ์ˆ˜๊ฐ€ ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ
  2. ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉด์„œ h-index ์ฐพ๊ธฐ
    • ํ˜„์žฌ i + 1๊ฐœ์˜ ๋…ผ๋ฌธ์ด citations[i] ์ด์ƒ ์ธ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
    • ์กฐ๊ฑด์ด ๊นจ์ง€๋Š” ์ˆœ๊ฐ„, ์ตœ๋Œ€ h๋ฅผ ๋ฐ˜ํ™˜

Step 3: ์ฝ”๋“œ ์„ค๊ณ„

  1. citations ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
  2. for ๋ฌธ์„ ๋Œ๋ฉด์„œ i + 1๋ฒˆ์งธ ๋…ผ๋ฌธ์˜ ์ธ์šฉ ํšŸ์ˆ˜์™€ ๋น„๊ต
  3. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ตœ๋Œ€ h-index๋ฅผ result์— ์ €์žฅ
  4. ์กฐ๊ฑด์ด ๊นจ์ง€๋Š” ์ˆœ๊ฐ„ result ๋ฐ˜ํ™˜

Step 4: ์ฝ”๋“œ ๊ตฌํ˜„

/**
 * @param {number[]} citations
 * @return {number}
 */
var hIndex = function(citations) {
    // 1. ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
    citations.sort((a, b) => b - a);

    let result = 0;

    // 2. ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ h-index ์ฐพ๊ธฐ
    for (let i = 0; i < citations.length; i++) {
        if (citations[i] >= i + 1) {
            result = i + 1;
        } else {
            break;  // ์กฐ๊ฑด์ด ๊นจ์ง€๋ฉด ์ค‘๋‹จ
        }
    }

    return result;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions