๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„์—” ๊ณต๋ถ€/๐Ÿซง ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜ || ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์˜น์•Œ์ด(2)

728x90

 

์ƒ๊ฐ๊ณผ ๊ณผ์ •์„ ์ž˜ ์ •๋ฆฌํ•˜๊ณ  ํ‘ธ๋Š” ๊ฒŒ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๋˜ ๊นจ๋‹ฌ์•˜๋‹ค.

 

์–ด์ œ๋Š” ํ’€๋ ค๊ณ  ํ•œ ๋‘์‹œ๊ฐ„ ์ •๋„ ์‹œ๋„ ํ–ˆ๋Š”๋ฐ ํ†ต๊ณผ ๋ชปํ–ˆ๋‹ค. 

์—ฐ์†๋œ ๋ฌธ์ž๋Š” ๋งํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฑธ ๋Šฆ๊ฒŒ ์ธ์‹ํ–ˆ๊ณ , ์–ด๋–ป๊ฒŒ ํŒ๋ณ„ํ•ด์•ผํ•˜๋‚˜ ๋พฐ์กฑํ•œ ์ˆ˜๊ฐ€ ์ƒ๊ฐ๋‚˜์ง€ ์•Š์•˜๋‹ค. 

(์ด๋ฏธ ์ข€ ์ง€์นจ)

 

 

 

์˜ค๋Š˜์€ ์–ด์ œ ์ฐธ์„ ๋ชปํ•œ ๋น„๋‚œ์ขŒ๊ฐ€ ์–ด์ œ๊บผ ํ‘ผ๋‹ค๊ณ  ํ•˜์…”์„œ ๋‚˜๋„ ๋‹ค์‹œ ์‹œ๋„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ํ’€์—ˆ๋‹ค!! ์•ผํ˜ธ!

 

 

 

 

function solution(babbling) {
    const words = ["aya", "ye", "woo", "ma"];
    const isSeries = (b, word) => {
        let s = b.replaceAll(word, "?");
        for (let i = 1; i < s.length; i++) {
            if (s[i] === "?") {
                if (s[i - 1] === "?") return true;
            }
        } return false;
    }

    words.map(w => {
        babbling = babbling.map(b => {
            if (w.length > 1) {
                if (!isSeries(b, w)) {
                    return b.split(w).join(" ");
                }
            }
            return b;
        })
    })

    return babbling.filter(v => v.trim() == "").length
}

0. ๊ฐ€์žฅ ์งง์€ ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ 2์ด๊ธฐ ๋•Œ๋ฌธ์— length ๊ฐ€ 2๋ฏธ๋งŒ์ธ ๋‹จ์–ด๋Š” ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค. (๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.)

1. ์—ฐ์†๋˜๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์˜น์•Œ์ด๋Š” ๊ฑธ๋Ÿฌ๋‚ธ๋‹ค. => isSeries ๊ฐ€ false ์—ฌ์•ผํ•จ. 

1-1. isSeries ํ•จ์ˆ˜์—์„œ maping ๋˜๊ณ  ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ํŠน์ˆ˜ํ•œ ๋ฌธ์ž("?")๋กœ ๋Œ€์ฒดํ•œ ํ›„,

     ๊ทธ ๋ฌธ์ž๊ฐ€ ์—ฐ์†ํ•ด์„œ ์žˆ๋Š” ๊ฒฝ์šฐ true ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

2. ๋‹จ์–ด ๊ธธ์ด๊ฐ€ ์ตœ์†Œ 2์ด๊ณ , ์—ฐ์†๋œ ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์˜ ์˜น์•Œ์ด๋“ค๋งŒ split์„ ํ†ตํ•ด ์—†์• ์ค€๋‹ค.(์†Œ๊ฑฐ)

3. ํ•˜์ง€๋งŒ join()์„ ๊ณต๋ฐฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ด์ „ ๋‹จ์–ด๋กœ ์†Œ๊ฑฐ๋œ ์˜น์•Œ์ด๊ฐ€ ๋‹จ์–ด์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

(ex) "myeyea"

" " ๋„์–ด์“ฐ๊ธฐ๋ฅผ ํ•ด์„œ ๋ถ™์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌํ•ด์คฌ๋‹ค. 

 

์ด ๊ณผ์ •์„ ๊ฑฐ์นœ ๋‹จ์–ด๋ฅผ trim() ํ–ˆ์„ ๋•Œ "" ์ธ ๋‹จ์–ด ์ฆ‰, ๋ชจ๋‘ ๊ฑธ๋Ÿฌ์ง„ ๋‹จ์–ด์˜ ๊ธธ์ด๋งŒ ์„ธ๋ฉด 

์ฃผ์–ด์ง„ ๋‹จ์–ด๋กœ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์˜น์•Œ์ด์˜ ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

 

ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

1. isSeries ํ•จ์ˆ˜: ๋ฌธ์ž์—ด b์—์„œ ๋‹จ์–ด word๊ฐ€ ์—ฐ์†์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ, ์—ฐ์† ๋“ฑ์žฅ ์‹œ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2. map ํ•จ์ˆ˜: 'babbling' ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด 'words' ๋ฐฐ์—ด์˜ ๊ฐ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ๋‹จ์–ด ์น˜ํ™˜: ๋‹จ์–ด w์˜ ๊ธธ์ด๊ฐ€ 1๋ณด๋‹ค ํฌ๊ณ  'b'์—์„œ w๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋“ฑ์žฅํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, 'b'์—์„œ 'w'๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ์น˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

4. ์นด์šดํŠธ: ์ˆ˜์ •๋œ 'babbling' ๋ฐฐ์—ด์—์„œ ๊ณต๋ฐฑ ๋ฌธ์ž์—ด์˜ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ณ , ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋จธ์“ฑ์ด์˜ ์กฐ์นด๊ฐ€ ๋ฐœ์Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

 

๋น„๋‚œ๋‹˜์ด ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์ฃผ์‹ฌใ…‹ใ…‹ใ…‹

 

 

์ด๊ฑฐ์Šจ ๊ณ ์ˆ˜ ๋น„๋‚œ์ขŒ์˜ ์ฝ”๋“œ.

๋ณด๊ธฐ๋งŒ ํ•ด๋„ ๊ณ ์ˆ˜์˜ ํ–ฅ๊ธฐ๊ฐ€ ๋‚œ๋‹ค.

const solution = (babbling) => {
    const regex = /^(aya|ye|woo|ma)*$/;

    return babbling.reduce((count, babble) => {
        if (!babble.match(regex)) {
            return count;
        }

        let lastWord = '';
        let currentWord = '';
        for (let char of babble) {
            currentWord += char;

            if (['aya', 'ye', 'woo', 'ma'].includes(currentWord) && lastWord !== currentWord) {
                lastWord = currentWord;
                currentWord = '';
            }
        }

        return currentWord === '' ? count + 1 : count;
    }, 0);
}

 

char ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹จ์–ด๊ฐ€ ๋งž์•„์ง€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค..

๊ทธ๋ฆฌ๊ณ  && ๋‹ค์Œ์ด ์—ฐ์†ํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š”๊ฑด๊ฐ€?

 

ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์นœ์ ˆํ•˜๊ฒŒ ์„ค๋ช…์„ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

const regex = /^(aya|ye|woo|ma)*$/;

regex ์ •๊ทœ ํ‘œํ˜„์‹์€ "aya", "ye", "woo", "ma" ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ '^'๋Š” ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘์„, '$'๋Š” ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. 

return babbling.reduce((count, babble) => {

reduce ํ•จ์ˆ˜๋Š” 'babbling' ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ˆ„์ ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ ์›์†Œ๊ฐ€ ๋จธ์“ฑ์ด์˜ ์กฐ์นด๊ฐ€ ๋ฐœ์Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์นด์šดํŠธ์— ๋ˆ„์ ํ•ฉ๋‹ˆ๋‹ค.

 if (!babble.match(regex)) {
            return count;
        }

๋”ฐ๋ผ์„œ ์ด ์ •๊ทœ ํ‘œํ˜„์‹์€ ๋ฌธ์ž์—ด ์ „์ฒด๊ฐ€ "aya", "ye", "woo", "ma" ์ค‘ ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 
๋งŒ์•ฝ ์ด ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด, ๊ทธ ์›์†Œ๋Š” ๋จธ์“ฑ์ด์˜ ์กฐ์นด๊ฐ€ ๋ฐœ์Œํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์–ด์ด๋ฏ€๋กœ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฌธ์ž๋ฅผ currentWord์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
for (let char of babble) {
    currentWord += char;

currentWord๊ฐ€ 'aya', 'ye', 'woo', 'ma' ์ค‘ ํ•˜๋‚˜์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งŒ์•ฝ currentWord๊ฐ€ ์ด๋“ค ์ค‘ ํ•˜๋‚˜์™€ ์ผ์น˜ํ•˜๋ฉด, ์šฐ๋ฆฌ๋Š” ์™„์ „ํ•œ ๋‹จ์–ด๋ฅผ ์ฐพ์•˜์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์—, ์ด ๋‹จ์–ด๋Š” ์ด์ „์— ์ฐพ์€ ๋‹จ์–ด(lastWord)์™€ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์กฐ์นด๊ฐ€ ์—ฐ์†๋œ ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ๋ฐœ์Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ทœ์น™์„ ๋งŒ์กฑ์‹œํ‚ต๋‹ˆ๋‹ค.

if (['aya', 'ye', 'woo', 'ma'].includes(currentWord) && lastWord !== currentWord) {

๋งŒ์•ฝ currentWord๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๋‹จ์–ด ๋ชฉ๋ก์— ์žˆ๊ณ  ์ด์ „ ๋‹จ์–ด์™€ ๋‹ค๋ฅด๋‹ค๋ฉด, lastWord์— ํ˜„์žฌ ๋‹จ์–ด๋ฅผ ์ €์žฅํ•˜๊ณ  currentWord๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋‹จ์–ด๋ฅผ ์ฐพ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

    lastWord = currentWord;
    currentWord = '';
}

๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ˆœํšŒํ•œ ํ›„์—, currentWord๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ currentWord๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, babble์ด ๊ทœ์น™์— ๋”ฐ๋ผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฐœ์Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ currentWord๊ฐ€ ๋นˆ ๋ฌธ์ž์—ด์ด ์•„๋‹ˆ๋ผ๋ฉด, ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด๋ฏ€๋กœ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
return currentWord === '' ? count + 1 : count;

์ด์™€ ๊ฐ™์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ 'babbling' ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๊ฐ€ ๋จธ์“ฑ์ด์˜ ์กฐ์นด๊ฐ€ ๋ฐœ์Œํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด์ธ์ง€ ํŒ๋‹จํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

๊ฐ€๋” ์•„๋‹ˆ ์ข…์ข… ๋น„๋‚œ๋ด‡์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ ์˜ค๋Š˜์€ ํŠนํžˆ ๋” ๋ด‡๊ฐ™์œผ์‹ฌใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

 

 

 

 

ํ—คํ—ค ํ’€๋ฉด ๋˜ ์žฌ๋ฐŒ๊ณ  ๋ชปํ’€๋ฉด ์žฌ๋ฏธ์—†๊ณ  ์–ด๋ ต๊ณ  ๊ทธ๋ฅด๋„น

 

 

 

 

 

 

 

+ ์ถฉ๊ฒฉ์˜ ํ’€์ด

function solution(babbling) {
  const regexp1 = /(aya|ye|woo|ma)\1+/;
  const regexp2 = /^(aya|ye|woo|ma)+$/;

  return babbling.reduce((ans, word) => (
    !regexp1.test(word) && regexp2.test(word) ? ++ans : ans
  ), 0);
}

 

728x90
๋ฐ˜์‘ํ˜•