[Javascript] ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ ๋ฉ”์„œ๋“œ ์ •๋ฆฌ

๐Ÿ˜‚ ๋“ค์–ด๊ฐ€๋ฉฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„๋ฅผ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ Lv.2 ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ๋ฅผ ํ‘ธ๋Š” ์ค‘์ด์—ˆ๋‹ค. ์ „ํ˜•์ ์ธ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ๋ผ ๋น„์Šทํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ ์ˆ˜์›”ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ฑ„์ ์„ ํ•˜๋Š”๋ฐ TypeError: doubledS.splice is not a function์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. string์—๋Š” splice ๋ฉ”์„œ๋“œ๊ฐ€ ์—†๋Š”๋ฐ ๋ฐฐ์—ด๊ณผ ์ฐฉ๊ฐํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ splice๋ฅผ slice๋กœ ๋ฐ”๊พธ์–ด ์ฃผ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ ๋ฌธํ•ญ์ด ์กด์žฌํ–ˆ๋‹ค. ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์—†๋Š”๋ฐ ์™œ ๊ทธ๋Ÿฌ๋Š”๊ฑฐ์ง€ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ ์ž๋ฅธ ๋ฌธ์ž์—ด์„ console.log๋ฅผ ์ด์šฉํ•ด ํ™•์ธํ•ด ๋ณด์•˜๋”๋‹ˆ ๋‚ด๊ฐ€ ์›ํ•˜๋˜ ํ˜•ํƒœ๋กœ ์ž˜๋ฆฌ์ง€๊ฐ€ ์•Š์•„ ์žˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ํ˜•ํƒœ๋Š” ๋ฌธ์ž์—ด์„ index๋กœ ๋ถ€ํ„ฐ length๋งŒํผ ์ž๋ฅด๋Š”๊ฑฐ์˜€๋Š”๋ฐ, String.slice()์˜ 2๋ฒˆ์งธ ์ธ์ž๋Š” length๊ฐ€ ์•„๋‹ˆ๋ผ indexEnd์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฒฐ๊ตญ Array.splice()์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” String์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ญ์˜€๋Š”์ง€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์•„ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๋ฉ”์„œ๋“œ๋Š” String.substr() ์ž„์„ ์•Œ๊ณ  ์ˆ˜์ •ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

ํ‰์†Œ ๋ฐฐ์—ด ์ž๋ฃŒ๊ตฌ์กฐ๋งŒ์„ ๊ฑฐ์˜ ํ™œ์šฉํ•˜๋‹ค ๋ณด๋‹ˆ ๋ฌธ์ž์—ด์˜ ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ๋“ค๋„ ์ž์ฃผ ๋‚˜์˜ค๋Š”๋ฐ ๋˜ ์žŠ์–ด๋ฒ„๋ฆฌ๋ฉด ์•ˆ๋˜๋‹ˆ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด๋ณด์ž๊ณ  ๊ฒฐ์‹ฌํ–ˆ๋‹ค.

๋‚˜์˜ ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ ํ’€์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function solution(s) {
const pair = {
'(': ')',
'[': ']',
'{': '}',
};

const getIsCorrectArray = (string) => {
const stack = [];
for (let i = 0; i < string.length; i++) {
if (stack.length === 0) stack.push(string[i]);
else if (string[i] === pair[stack[stack.length - 1]]) stack.pop();
else stack.push(string[i]);
}
return stack.length === 0;
};

const doubledS = s + s;
let correctString = 0;
for (let i = 0; i < s.length; i++) {
if (getIsCorrectArray(doubledS.splice(i, s.length))) correctString++;
}

return correctString;
}

๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” substr(), substring(), slice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์„ธ ๊ฐ€์ง€์˜ ํ•จ์ˆ˜ ์ค‘ ์ƒํ™ฉ์— ๋งž๋Š” ์ ์ ˆํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ๊ฐ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

substr(): ํŠน์ • index์—์„œ ์›ํ•˜๋Š” ๊ธธ์ด๋งŒํผ ์ž˜๋ผ์„œ ๋ฌธ์ž์—ด๋กœ ๋ฆฌํ„ด

๋ฌธ๋ฒ•

1
str.substr(start[, length])

๋งค๊ฐœ๋ณ€์ˆ˜

  • start

    • ์ถ”์ถœํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž๋“ค์˜ ์‹œ์ž‘์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์Œ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค๋ฉด, ๋ฌธ์ž์—ด์ด๊ธธ์ด + start์˜ ๊ฐ’์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, start์— -3์„ ์„ค์ •ํ•˜๋ฉด, ์ž๋™์ ์œผ๋กœ ๋ฌธ์ž์—ด์ด๊ธธ์ด - 3์œผ๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • length

    • ์˜ต์…˜๊ฐ’. ์ถ”์ถœํ•  ๋ฌธ์ž๋“ค์˜ ์ด ์ˆซ์ž.

substring(): ์‹œ์ž‘ index์—์„œ ๋ index์ „๊นŒ์ง€ ๋ฌธ์ž์—ด ์ž˜๋ผ์„œ ๋ฆฌํ„ด

๋ฌธ๋ฒ•

1
str.substring(indexStart[, indexEnd])

๋งค๊ฐœ๋ณ€์ˆ˜

  • indexStart

    • ๋ฐ˜ํ™˜๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
  • indexEnd

    • ์˜ต์…˜. ๋ฐ˜ํ™˜๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค (ํฌํ•จํ•˜์ง€ ์•Š์Œ.)

ํŠน์ง•

  • ๋งŒ์•ฝ indexEnd ๊ฐ€ ์ƒ๋žต๋œ ๊ฒฝ์šฐ, substring() ๋ฌธ์ž์—ด์˜ ๋๊นŒ์ง€ ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ์ถ”์ถœ
  • ๋งŒ์•ฝ indexStart ๊ฐ€ indexEnd์™€ ๊ฐ™์„ ๊ฒฝ์šฐ, substring() ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜
  • ๋งŒ์•ฝ indexStart ๊ฐ€ indexEnd๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, substring() ๋ฉ”์„œ๋“œ๋Š” ๋งˆ์น˜ ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ”๊พผ ๋“ฏ ์ž‘๋™

slice(): substring๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์‚ด์ง ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ

๋ฌธ๋ฒ•

1
str.slice(beginIndex[, endIndex])

๋งค๊ฐœ๋ณ€์ˆ˜

  • beginIndex

    • ๋ฐ˜ํ™˜๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค
  • endIndex

    • ์˜ต์…˜. ๋ฐ˜ํ™˜๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค (ํฌํ•จํ•˜์ง€ ์•Š์Œ.)

ํŠน์ง•

  • ์ธ์ž๋กœ ์Œ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ์„ ๋•Œ, substring()์€ ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•˜์ง€๋งŒ slice()๋Š” ์Œ์ˆ˜ Index๋ฅผ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์คŒ.

๐Ÿ˜… ์—†์–ด์งˆ ๋ฉ”์„œ๋“œ??

substr() ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ •ํ™•ํžˆ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด MDN์— ๊ฒ€์ƒ‰์„ ํ•˜๋Š” ์ค‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๊ฐ€ ๋‹ฌ๋ ค์žˆ์—ˆ๋‹ค.

๊ฒฝ๊ณ : ์—„๋ฐ€ํžˆ ๋งํ•ด์„œ String.prototype.substr() ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”, ์ฆ‰ โ€œ์›น ํ‘œ์ค€์—์„œ ์ œ๊ฑฐ๋œโ€ ๊ฑด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ substr()์ด ํฌํ•จ๋œ ECMA-262 ํ‘œ์ค€์˜ ๋ถ€๋ก B๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.> โ€ฆ ๋ณธ ๋ถ€๋ก์ด ํฌํ•จํ•œ ๋ชจ๋“  ์–ธ์–ด ๊ธฐ๋Šฅ๊ณผ ํ–‰๋™์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ฒ˜๊ฐ€ ์—†์–ด์งˆ ๊ฒฝ์šฐ ๋ช…์„ธ์—์„œ ์ œ๊ฑฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€ฆ

์•„๋‹ˆ ๊ทธ๋Ÿฌ๋ฉด length๋กœ ์ž๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ผ๋Š”๊ฑฐ์ง€? ์ƒ๊ฐํ–ˆ๋Š”๋ฐ str.slice()๋‚˜ str.substr()์˜ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๋งž์ถ”์–ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์›ํ•˜๋Š” length๋งŒํผ ์ž๋ฅด๊ธฐ ์œ„ํ•ด์„  str.slice(beginIndex, beginIndex + length)๋กœ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.(์‚ฌ์‹ค ์ด๋ฒˆ ๋ฌธ์ œ๋„ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋์„ํ…๋ฐ ์‹œ์•ผ๊ฐ€ ๋„ˆ๋ฌด ์ข์•˜๋˜๊ฒƒ ๊ฐ™๋‹ค. ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉด ๊ดœ์ฐฎ์•„์ง€๋ ค๋‚˜..?)

์ฐธ๊ณ