ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[JS] > ๋ด‰์ธ๋œ ์ฃผ๋ฌธ

2025. 3. 8. 16:46ยท๐Ÿ”’Algorithm

๐Ÿงฉ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/389481

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

๐Ÿงฉ๋ฌธ์ œํ’€์ด

์—ญ์‹œ lv3 ๋‹ต๊ฒŒ ๊ต‰์žฅํžˆ ์–ด๋ ต๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•œ ์ ‘๊ทผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค 

  1. ์ผ๋‹จ ํŠน์ • ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ทธ ์ˆซ์ž๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ๋ฌธ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค. ( ๋ฌธ์ œ ์ง„ํ–‰ ์‹œ ํ•„์š” )
  2. ๋ฐ˜๋Œ€๋กœ ํŠน์ • ๋ฌธ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด ๋ฌธ์ž๋Š” ์‚ฌ์ „์—์„œ ๋ช‡๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค. ( ๋ฌธ์ œ ์ง„ํ–‰ ์‹œ ํ•„์š” ) 
  3. bans ๋ฅผ ๊ธธ์ด๊ฐ€ ์งง์€์ˆœ์œผ๋กœ, ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  4. bansArr ๋ฅผ ๋งŒ๋“ ๋‹ค ( bansArr[i] = bans[i] ๋ฌธ์ž์—ด์ด ๋ช‡๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š”์ง€ )
  5. bansArr๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ bansArr[i] <=n ์ผ ์‹œ n+=1 ์„ ํ•œ๋‹ค. 
  6. ์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ฐพ์„ ์‚ฌ์ „์ƒ ์ง„์งœ n๋ฒˆ์งธ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๊ณ  ์ด์ œ ๊ทธ n์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌธ์ž์—ด์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค

๋‚ด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ํ•ฉ๊ฒฉ๋ฐ›์€ ์ฝ”๋“œ์ด๋‹ค.  dictionary ๋ผ๋Š” ๊ฐ์ฒด ์ด์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๊ด€์ƒ ๋ณด๊ธฐ ์ข‹์ง„ ์•Š๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ–ˆ๋‹ค.  

๐Ÿ”จ์ฒซ๋ฒˆ์งธํ’€์ด

// https://school.programmers.co.kr/learn/courses/30/lessons/389481

let strToIndex = (str) => {
    const dictionary = {
        a: 1,
        b: 2,
        c: 3,
        d: 4,
        e: 5,
        f: 6,
        g: 7,
        h: 8,
        i: 9,
        j: 10,
        k: 11,
        l: 12,
        m: 13,
        n: 14,
        o: 15,
        p: 16,
        q: 17,
        r: 18,
        s: 19,
        t: 20,
        u: 21,
        v: 22,
        w: 23,
        x: 24,
        y: 25,
        z: 26,
    };

    let num = 0;
    for (let i = 0; i < str.length; ++i) {
        num = 26 * num + dictionary[str[i]];
    }
    return num;
};

let indexToStr = (index) => {
    const dictionary = {
        0: "a",
        1: "b",
        2: "c",
        3: "d",
        4: "e",
        5: "f",
        6: "g",
        7: "h",
        8: "i",
        9: "j",
        10: "k",
        11: "l",
        12: "m",
        13: "n",
        14: "o",
        15: "p",
        16: "q",
        17: "r",
        18: "s",
        19: "t",
        20: "u",
        21: "v",
        22: "w",
        23: "x",
        24: "y",
        25: "z",
    };

    let str = "";
    while (index > 0) {
        let remain = (index - 1) % 26;
        str = dictionary[remain] + str;
        index = Math.floor((index - 1) / 26);
    }
    return str;
};

function solution(n, bans) {
    bans = bans.sort((a, b) => {
        let aIndex = strToIndex(a);
        let bIndex = strToIndex(b);
        return aIndex - bIndex;
    });

    let bansArr = [];
    bans.forEach((str) => {
        let num = strToIndex(str);
        bansArr.push(num);
    });

    let targetN = n;
    for (let i = 0; i < bansArr.length; ++i) {
        if (bansArr[i] <= targetN) {
            targetN = targetN + 1;
        }
    }

    let answer = indexToStr(targetN);
    return answer;
}

๐Ÿ”จ๋‘๋ฒˆ์งธํ’€์ด

์ฒซ๋ฒˆ์งธ ํ’€์ด์™€ ๋‹ฌ๋ฆฌ ๊ตณ์ด dictionary๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์•„๋„ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ๋Œ€์‹  utf16 ๊ธฐ์ค€ ๋ฌธ์ž์˜ ์ฝ”๋“œํ‘œ์—์„œ a๋Š” 97, b๋Š” 98 ... ์ž„์„ ์ด์šฉํ•˜์˜€๊ณ  ์ด๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ ๋ฉ”์„œ๋“œ์ธ String.fromCharCode ์™€ String.charCodeAt(i) ์„ ์ด์šฉํ•˜์˜€๋‹ค. 

let strToIndex = (str) => {
    let num = 0;
    for (let i = 0; i < str.length; ++i) {
        num = 26 * num + (str[i].charCodeAt(0) - 96);
    }
    return num;
};

let indexToStr = (index) => {
    let str = "";
    while (index > 0) {
        let remain = (index - 1) % 26;
        str = String.fromCharCode(remain + 97) + str;
        index = Math.floor((index - 1) / 26);
    }
    return str;
};

function solution(n, bans) {
    bans = bans.sort((a, b) => {
        let aIndex = strToIndex(a);
        let bIndex = strToIndex(b);
        return aIndex - bIndex;
    });

    let bansArr = [];
    bans.forEach((str) => {
        let num = strToIndex(str);
        bansArr.push(num);
    });

    let targetN = n;
    for (let i = 0; i < bansArr.length; ++i) {
        if (bansArr[i] <= targetN) {
            targetN = targetN + 1;
        }
    }

    let answer = indexToStr(targetN);
    return answer;
}

๐Ÿงฉ์ฐธ๊ณ 

๐Ÿ”จcharCodeAt

๋ฌธ์ž์—ด์—์„œ ํŠน์ • index์˜ ๋ฌธ์ž์˜ ์ฝ”๋“œ ํฌ์ธํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ( utf16 ๊ธฐ์ค€ ) ๋งŒ์•ฝ "ABC".charCodeAt(1) ์ด์—ˆ๋‹ค๋ฉด 66์ด ๋ฐ˜ํ™˜ ๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt

 

String.prototype.charCodeAt() - JavaScript | MDN

String ๊ฐ’์˜ charCodeAt() ๋ฉ”์„œ๋“œ๋Š” ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์˜ UTF-16 ์ฝ”๋“œ ๋‹จ์œ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” 0๊ณผ 65535 ์‚ฌ์ด์˜ ์ •์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

๐Ÿ”จString.fromCharCode

์ž…๋ ฅ๋ฐ›์€ ์ฝ”๋“œ ํฌ์ธํŠธ ( utf16 ๊ธฐ์ค€ ) ์— ๋งž๋Š” ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‹œํ€€์Šค๋กœ ์ž…๋ ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

 

String.fromCharCode() - JavaScript | MDN

String.fromCharCode() ๋ฉ”์„œ๋“œ๋Š” UTF-16 ์ฝ”๋“œ ์œ ๋‹›์˜ ์‹œํ€€์Šค๋กœ๋ถ€ํ„ฐ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

๐Ÿ”จlocaleCompare

์ด๋ฒˆ์— ์•Œ๊ฒŒ๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด์žฅ๋ฉ”์„œ๋“œ ์ด๋‹ค. ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ํ•œ๋ฒˆ์— ์ดํ•ด๋  ๊ฒƒ์ด๋‹ค.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

 

String.prototype.localeCompare() - JavaScript | MDN

localeCompare() ๋ฉ”์„œ๋“œ๋Š” ์ฐธ์กฐ ๋ฌธ์ž์—ด์ด ์ •๋ ฌ ์ˆœ์œผ๋กœ ์ง€์ •๋œ ๋ฌธ์ž์—ด ์•ž ํ˜น์€ ๋’ค์— ์˜ค๋Š”์ง€ ๋˜๋Š” ๋™์ผํ•œ ๋ฌธ์ž์—ด์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ˜์น˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 

'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€[JS] > 1697๋ฒˆ ์ˆจ๋ฐ”๊ผญ์งˆ  (0) 2025.03.09
10์ง„์ˆ˜ <-> 16์ง„์ˆ˜ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2025.03.08
๋ฐฑ์ค€[JS] > 13305๋ฒˆ ์ฃผ์œ ์†Œ  (0) 2025.03.08
๋ฐฑ์ค€[JS] > 1244๋ฒˆ ์Šค์œ„์น˜ ์ผœ๊ณ  ๋„๊ธฐ  (0) 2025.03.06
๋ฐฑ์ค€[JS] > 23971๋ฒˆ ZOAC 4  (0) 2025.03.06
'๐Ÿ”’Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€[JS] > 1697๋ฒˆ ์ˆจ๋ฐ”๊ผญ์งˆ
  • 10์ง„์ˆ˜ <-> 16์ง„์ˆ˜ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ฐฑ์ค€[JS] > 13305๋ฒˆ ์ฃผ์œ ์†Œ
  • ๋ฐฑ์ค€[JS] > 1244๋ฒˆ ์Šค์œ„์น˜ ์ผœ๊ณ  ๋„๊ธฐ
devWarrior
devWarrior
  • devWarrior
    devWarrior
    devWarrior
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐ŸงฉDev (263)
      • โญFE (34)
      • ๐Ÿ”’Algorithm (155)
      • โž•Etc. (11)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
    • ๊ด€๋ฆฌ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    FE
    ๊ตฌํ˜„
    react
    ๊ณจ๋“œ5
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ์ž์Šค
    ์˜ค๋ธ”์™„
    BFS
    nodejs
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์ฝ”ํ…Œ
    js
    dp
    ์‹ค๋ฒ„1
    node.js
    ํ”„๋ก ํŠธ์—”๋“œ
    leetcode
    Algorithm
    ์‹ค๋ฒ„3
    Easy
    ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
    ์‹ค๋ฒ„2
    ๋ฐฑ์ค€
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    DFS
    javascript
    ๊ทธ๋ฆฌ๋””
    Lv2
    ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
    ์‹ค๋ฒ„4
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
devWarrior
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[JS] > ๋ด‰์ธ๋œ ์ฃผ๋ฌธ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”