
๋ฌธ์ ์ ํต์ฌ : ๊ดํธ์ ์ง์ ๋ง์ถ์ด๋ผ
์ฒ์์๋ โ์ด๋ฆฐ ๊ดํธ๊ฐ ๋์ค๋ฉด ๊ทธ ๋ค์ ๋ฐ๋ผ์ค๋ ๊ดํธ๋ ๋ฐ๋์ ๊ทธ ์ง์ด์ด์ผํ๋คโ๋ผ๋ ์ ์๋ฅผ ๋ด๋ฆฌ๊ณ ์ธ๋ฑ์ค๋ก ํด๊ฒฐํด๋ณด๋ ค๊ณ ์ ๊ทผํ๋ค.
ํ์ง๋ง ์น๋ช
์ ์ธ ๋ฌธ์ ๊ฐ ์์๋๋ฐ
์์๋๋ก ์ค๋ []{}()๋ ๊ฒ์ฆํ ์ ์์ง๋ง nested๋ [{()}]๋ ๊ฒ์ฆํ ์ ์์๋ค
โ์ด๋ฆฐ ๊ดํธ๊ฐ ๋์ค๋ฉด ๊ทธ ๋ค์ ๋ฐ๋ผ์ค๋ ๊ดํธ๋ ๋ฐ๋์ ๊ทธ ์ง์ด์ด์ผํ๋คโ๋ผ๋ ํด๋ต์ ์ฑ๋ฆฝํ ์ ์๋ค.
์๋๋ฉด (){}[] ๋ง ์ ๋ต์ด ์๋๊ณ , ({[]}) ์ด๋ ๊ฒ๋ ์ ๋ต์ด๊ธฐ ๋๋ฌธ์.
Stack ๊ตฌ์กฐ๋ก ๊ฐ๋จํ ํ ์ ์๋ ๋ฌธ์ !
๋ฐ๋ผ์ ์ด๋ฆฐ ๊ดํธ๋ฅผ ์์๋๋ก stack์ ์ถ๊ฐํ๊ณ , ๋ซํ ๊ดํธ๊ฐ ๋์ค๋ฉด, ์คํ์ ์ ์ผ ์ต๊ทผ์ ์ถ๊ฐ๋ ๋งจ ๋ง์ง๋ง(๋งจ ์) ์์๊ฐ "("์ฌ์ผํ๋ค.
๋ซํ ๊ดํธ๊ฐ ๋์์ ๋ ์คํ์์ ๋งจ ๋ง์ง๋ง์ ์๋ ์์๊ฐ ํด๋น ๋ซํ ๊ดํธ์ ์ง์ด ๋ง๋์ง๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ
์์: s = "({[]})"
| ๋ฌธ์ | ์คํ ์ํ | ์ค๋ช |
|---|---|---|
( | [(] | ์ฌ๋ ๊ดํธ๋๊น push |
{ | [(, {] | ์ฌ๋ ๊ดํธ๋๊น push |
[ | [(, {, [] | ์ฌ๋ ๊ดํธ๋๊น push |
] | [(, {] | [์ ๋ซํ์ด๋๊น pop, ์ง์ด ๋ง์ โ
|
| โ Stack์์ ์ ๊ฑฐํ๋ค | ||
} | [(] | {์ ๋ซํ์ด๋๊น pop, ์ง์ด ๋ง์ โ
|
| โ Stack์์ ์ ๊ฑฐํ๋ค | ||
) | [] | (์ ๋ซํ์ด๋๊น pop, ์ง์ด ๋ง์ โ
|
| โ Stack์์ ์ ๊ฑฐํ๋ค |
โ ์คํ์ด ์์ ํ ๋น์์ผ๋ฏ๋ก, ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด
// Stack ๊ตฌ์กฐ๋ก ํ๊ธฐ
var isValid = function (s) {
// 1. ์ด๋ฆฐ ๊ดํธ๊ฐ ๋์ค๋ฉด Stack์ ์ถ๊ฐํ๋ค
// 2. ๋ซํ ๊ดํธ๊ฐ ๋์ค๋ฉด stack์ ๋งจ ๋ง์ง๋ง ์์์ ๋น๊ต. ๋ฐ๋์ ์ง์ด์ด์ผํ๋ค
// 3. ์ง์ด ๋ง๋ค๋ฉด stack์์ ์ ๊ฑฐ
// 4. ๋ฐ๋ณต๋ฌธ์ด ๋๋ ์ดํ์๋ stack์ ๊ฐ์ด ๋จ์์๋ค๋ฉด false, ๋น์ด์๋ค๋ฉด true
const input = s.split("")
console.log("input", input)
const stack = []
input.map((el) => {
console.log("el", el)
if (el === "(" || el === "{" || el === "["){
console.log("์ด๋ฆฐ ๊ดํธ์
๋๋ค", el,stack)
stack.push(el)
} else {
console.log("๋ซํ ๊ดํธ์
๋๋ค",el)
if(PAIR[el] === stack[stack.length - 1]) {
// stack์ ๋งจ ๋ง์ง๋ง ์์์ ๋น๊ต, PAIR์ ์ผ์นํด์ผํ๋ค
console.log("์ง์ด ์ผ์นํฉ๋๋ค")
stack.pop()
}
}
})
return stack.length === 0
};
var isValid = function (s) {
// 1. ์ด๋ฆฐ ๊ดํธ๊ฐ ๋์ค๋ฉด Stack์ ์ถ๊ฐํ๋ค
// 2. ๋ซํ ๊ดํธ๊ฐ ๋์ค๋ฉด stack์ ๋งจ ๋ง์ง๋ง ์์์ ๋น๊ต. ๋ฐ๋์ ์ง์ด์ด์ผํ๋ค
// 3. ์ง์ด ๋ง๋ค๋ฉด stack์์ ์ ๊ฑฐ
// 4. ๋ฐ๋ณต๋ฌธ์ด ๋๋ ์ดํ์๋ stack์ ๊ฐ์ด ๋จ์์๋ค๋ฉด false, ๋น์ด์๋ค๋ฉด true
const input = s.split("")
console.log("input", input)
const stack = []
input.map((el) => {
console.log("el", el)
if (el === "(" || el === "{" || el === "["){
console.log("์ด๋ฆฐ ๊ดํธ์
๋๋ค", el,stack)
stack.push(el)
} else {
console.log("๋ซํ ๊ดํธ์
๋๋ค",el)
if(PAIR[el] === stack[stack.length - 1]) {
// stack์ ๋งจ ๋ง์ง๋ง ์์์ ๋น๊ต, PAIR์ ์ผ์นํด์ผํ๋ค
console.log("์ง์ด ์ผ์นํฉ๋๋ค")
stack.pop()
}
}
})
return stack.length === 0
};
( ๋ ์คํ์ ๋ค์ด๊ฐ โ stack = ["("]] ๊ฐ ๋์ค๋ฉด PAIR[']']๋ '['์ด์ง๋ง stack[stack.length - 1]์ '(' โ ์ง์ด ์ ๋ง์else ์กฐ๊ฑด ๋ด์์ if (์ง์ด ๋ง์ ๋)๋ง ์ฒ๋ฆฌํ๊ณ ์ง์ด ์ ๋ง์ ๊ฒฝ์ฐ ๊ทธ๋ฅ ๋ฌด์ํ๊ณ ๋์ด๊ฐ์"("๊ฐ ๋จ์ ์ฑ stack.length !== 0, ๊ฒฐ๊ณผ๋ false๊ฐ ๋์ค๊ธด ํ๋๋ฐโฆ๐ก map์ ๋ฐ๋ณต ์ฉ๋๊ฐ ์๋๋ค
map ๋์ for-of์ ์ฐ๋ ์ด์ ?
map์ ๋ฐฐ์ด์ ๋ณํํ ๋ ์ฐ๋ ํจ์์์. (return ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์)
ํ์ง๋ง ์ด ๋ฌธ์ ๋ ๊ฐ์ ๋ณํํ์ง ์๊ณ , ๋จ์ ๋ฐ๋ณตํ๋ฉด์ ์คํ์ ์กฐ์ํ๊ธฐ๋ง ํ๋ฉด ๋ผ์.
๊ทธ๋์ for-of์ด ๋ ์ ์ ํด์. ๋ ์ง๊ด์ ์ด๊ณ ์ฑ๋ฅ๋ ๋ซ์ต๋๋ค.
// ๊ฐ์ ํ๊ธฐ
var isValid = function (s) {
// 1. ์ด๋ฆฐ ๊ดํธ๊ฐ ๋์ค๋ฉด Stack์ ์ถ๊ฐํ๋ค
// 2. ๋ซํ ๊ดํธ๊ฐ ๋์ค๋ฉด stack์ ๋งจ ๋ง์ง๋ง ์์์ ๋น๊ต. ๋ฐ๋์ ์ง์ด์ด์ผํ๋ค
// 3. ์ง์ด ๋ง๋ค๋ฉด stack์์ ์ ๊ฑฐ
// 4. ๋ฐ๋ณต๋ฌธ์ด ๋๋ ์ดํ์๋ stack์ ๊ฐ์ด ๋จ์์๋ค๋ฉด false, ๋น์ด์๋ค๋ฉด true
const input = s.split("")
console.log("input", input)
const stack = []
for (el of input) {
console.log("el", el)
if (el === "(" || el === "{" || el === "[") {
console.log("์ด๋ฆฐ ๊ดํธ์
๋๋ค", el)
stack.push(el)
} else {
console.log("๋ซํ ๊ดํธ์
๋๋ค", el)
if(PAIR[el] === stack[stack.length - 1]) {
console.log("์ง์ด ์ผ์นํฉ๋๋ค", el)
stack.pop()
} else {
console.log("์ง์ด ์ผ์นํ์ง ์์ต๋๋ค", el)
return false
// ์ฌ๊ธฐ์ false๋ฅผ ๊ตณ์ด ํด์ผํ๋ ์ด์ ?
// ๋์ด์ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉฐ ๊ณ์ฐํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ
}
}
}
return stack.length === 0
};
์ด๋ก ๋ง ์๊ณ ์๋ stack์ ์ฒ์ ๊ตฌํํด๋ด์ ์ข์๊ณ ๋ฐ์ฑํ๋ค.
์๋ฃ๊ตฌ์กฐ์์ ์คํ์ ์ฐํ, ํ๋ ๋๊ธฐ์ด์ด๋ผ๊ณ ์ด๋ก ์ ์ผ๋ก๋ง ์๊ฐํ์๋๋ฐ
์ ๋ง๋ก ์ค์ ์ฝ๋์์ ์ฌ์ฉ๋๋๊ตฌ๋! ๊ณ ๋๊ผ๋ค.
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ ์ฌ๋ฆฌ๋ ์ฐ์ต์ด ํ์ํ๋ค....
์ฌ์ค ๊ทธ๊ฒ ์ ์ผ ์ด๋ ต๋ค