์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ธํ”„๋Ÿฐ ์„น์…˜7] ๊ฒฐํ˜ผ์‹ (Javascript)

์€์ง„ 2021. 6. 27. 21:53

์ธํ”„๋Ÿฐ

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป๋ฌธ์ œ๋งํฌ

[์ธํ”„๋Ÿฐ ์„น์…˜7] ๊ฒฐํ˜ผ์‹ (Javascript)
์œ ๋ฃŒ ๊ฐ•์˜์ธ ๊ด€๊ณ„๋กœ ๋ฌธ์ œ ์„ค๋ช…์€ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.


โœ๏ธIdea Sketch

2021-06-27

1. ๋™์‹œ์— ์กด์žฌํ•˜๋Š” ์ตœ๋Œ€ ์ธ์›์ˆ˜ ๊ตฌํ•˜๊ธฐ

2. arr๋ฅผ ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•  ๊ฒƒ์ธ๊ฐ€?

  • ์‹œ์ž‘์‹œ๊ฐ„ ์ข…๋ฃŒ์‹œ๊ฐ„ ์ƒ๊ด€์—†์ด, ๋ฐฐ์—ด์— ๋“ฑ์žฅํ•œ ๋ชจ๋“  ์‹œ๊ฐ„์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  • ๋‹จ, ์‹œ์ž‘์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt+1, ์ข…๋ฃŒ์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt-1
let table = [];

for (let x of arr) {
    table.push([x[0], 1]);  // ์‹œ์ž‘์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt+1
    table.push([x[1], -1]);  // ์ข…๋ฃŒ์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt-1
}

table.sort((a, b) => a[0] - b[0]);

3. ์ •๋ ฌํ•œ ๋ฐฐ์—ด table์„ ์ˆœํšŒ

let cnt = 0;
for (let x of table){
    cnt += x[1];
    max = Math.max(max, cnt);
};

4. ๋“ค์–ด์˜ค๋Š” ์‚ฌ๋žŒ๊ณผ +1 ๋‚˜๊ฐ€๋Š” ์‚ฌ๋žŒ์ด -1 ๋™์‹œ์— ์กด์žฌํ•  ๊ฒฝ์šฐ

  • cnt+0์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ
  • ํ˜„ ๋กœ์ง์—์„œ๋Š” cnt+1์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ max์— ์˜ํ–ฅ์„ ๋ฏธ์นจ

5. ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ๋ฐฉ๋ฒ• 1. hash ์‚ฌ์šฉํ•˜๊ธฐ --> ๋ฌธ์ œ์  : hash์˜ Map()์€ ์‚ฝ์ž… ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ, ์ •๋ ฌX
  • ๋ฐฉ๋ฒ• 2. ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ์˜ ์‹œ๊ฐ„์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋งŒ Math.max() ์—ฐ์‚ฐ
let cnt = 0;
for (let i = 0; i < table.length; i++) {
    cnt += table[i][1];
    if (table[i][0] !== table[i + 1][0]) max = Math.max(max, cnt);
};

6. for ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ์กฐ๊ฑด ์ˆ˜์ •

  • table ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ˆœํšŒํ•  ๋•Œ, table[i + 1][0] ์˜ค๋ฅ˜ ๋ฐœ์ƒ
  • ๋“ค์–ด์˜จ ์ธ์›์€ ๋ฐ˜๋“œ์‹œ ๋‚˜๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ, table์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋Š” ๋ฌด์กฐ๊ฑด cnt-1
  • ์šฐ๋ฆฌ๋Š” max ์ธ์›์„ ๊ตฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, table ๋งˆ์ง€๋ง‰ ์›์†Œ๋Š” ์ˆœํšŒํ•˜์ง€ ์•Š์•„๋„ ์ƒ๊ด€์—†๋‹ค.
let cnt = 0;
for (let i = 0; i < table.length-1; i++) {
    cnt += table[i][1];
    if (table[i][0] !== table[i + 1][0]) max = Math.max(max, cnt);
};



4๋ฒˆ์˜ ๋˜๋‹ค๋ฅธ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • table.sort() ํ•  ๋•Œ ์‹œ๊ฐ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ, -1 +1์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
  • table ์ˆœํšŒ ๋กœ์ง ๋‹จ์ˆœํ•ด์ง
table.sort((a, b) => {
    if (a[0] === b[0]) return a[1]-b[1];
    return a[0] - b[0];
});

for (let x of table){
    cnt += x[1];
    max = Math.max(max, cnt);
};


โœ๏ธ์†Œ์Šค์ฝ”๋“œ

2021-06-27

function solution(arr) {
    let max = 0, cnt = 0;

    let table = [];
    for (let x of arr) {
        table.push([x[0], 1]);   // ์ถœ์ž…์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt+1
        table.push([x[1], -1]);   // ํ‡ด์žฅ์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt-1
    }
    table.sort((a, b) => a[0] - b[0]);

    for (let i = 0; i < table.length-1; i++) {
        cnt += table[i][1];
        if (table[i][0] !== table[i + 1][0]) max = Math.max(max, cnt);
    };
    return max;
}


2021-06-27

function solution(arr) {
    let max = 0, cnt = 0;
    let table = [];

    for (let x of arr) {
        table.push([x[0], 1]);   // ์ถœ์ž…์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt+1
        table.push([x[1], -1]);   // ํ‡ด์žฅ์‹œ๊ฐ„์ผ ๊ฒฝ์šฐ cnt-1
    }

    table.sort((a, b) => a[0]===b[0] ? a[1]-b[1] : a[0]-b[0]);

    for (let x of table) {
        cnt += x[1];
        max = Math.max(max, cnt);
    };

    return max;
}