์คํ (stack)
Last In Firtst Out ๋จผ์ ๋ค์ด๊ฐ ์๋ฃ๊ฐ ๋์ค์ ๋์ค๋ ํ์ ์ ์ถ ์๋ฃ๊ตฌ์กฐ
์๋ฐ์คํฌ๋ฆฝํธ์์ stack์ ๋ฐฐ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ push() ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ pop() ์ ์ฌ์ฉ์ผ๋ก ๊ตฌํํ ์ ์๋ค.
์คํ์ ์๊ฐ๋ณต์ก๋
์ฝ์ | O(1) |
์ญ์ | O(1) |
ํ์ | O(n) |
ํ์์ ํ ๋ n๊ฐ ์์๋ฅผ ๋์์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ O(n)์ด๋ค. n๋ฒ์งธ ์์์ ์ ๊ทผํ ๋ pop()์ n๋ฒ ์ํํ๋ฉด n๋ฒ์งธ ์์์ ์ ๊ทผํ ์ ์๋ค. pop()์ ์๊ฐ๋ณต์ก๋๋ O(1) ์ด๋ฏ๋ก n๋ฒ์งธ ์์์ ์ ๊ทผํ๋ ์๊ฐ๋ณต์ก๋๋ O(n)์ด๋ค.
์์ ๋ฌธ์ 1
๊ดํธ์ ์ง์ด ๋ง์ผ๋ฉด "YES"๋ฅผ ๋ฆฌํดํ๊ณ , ๋ง์ง ์์ผ๋ฉด "NO"๋ฅผ ๋ฆฌํดํด๋ผ
const solution = (str) => {
// ๋ฐฐ์ด์ for๋ฌธ์ผ๋ก ๋๋ฉด์ (์ด๋ฉด push )์ด๋ฉด popํด์ ํ๋๋ ์๋จ์์์ผ๋ฉด yes ๋ฆฌํด, ํ๋๋ผ๋ ๋จ์์์ผ๋ฉด no ๋ฆฌํด
let answer = "YES";
let newArr = [];
for (let x of str) {
if (x === '(') newArr.push(x);
else {
if (newArr.length === 0) {
return "No";
}
newArr.pop(x);
}
}
if (newArr.length === 0) {
return answer;
} else {
return "NO";
}
}
const str = "()()"
console.log(solution(str));
์์ ๋ฌธ์ 2
์ ๋ง๋๊ธฐ๋ ์์ ๋ณด๋ค ๊ธด ์ ๋ง๋๊ธฐ ์์๋ง ๋์ผ ์ ์๋ค. ์ ๋ง๋๊ธฐ๋ฅผ ๋ค๋ฅธ ์ ๋ง๋๊ธฐ ์ํค ๋๋ ๊ฒฝ์ฐ ์์ ํ ํฌํจ๋๋๋ก ๋๊ณ , ๋์ ์ ๊ฒน์น์ง ์๋๋ค.
๋ ์ด์ ๋ ๊ดํธ์ ์์ผ๋ก ํํ๋๋ค => '( )'
์ ๋ง๋๊ธฐ์ ์ผ์ชฝ ๋์ ์ฌ๋ ๊ดํธ '( ' ์ด๊ณ ์ค๋ฅธ์ชฝ ๋์ ๋ซํ ๊ดํธ ')'๋ก ํํ๋๋ค.
์ ๋ง๋๊ธฐ๋ ๋ ์ด์ ์ ์ํด ๋ช ๊ฐ์ ์กฐ๊ฐ์ผ๋ก ์๋ ค์ง๋ค.
์ ๋ง๋๊ธฐ์ ๋ ์ด์ ์ ๋ฐฐ์น๋ฅผ ๋ํ๋ด๋ ๊ดํธ ํํ์ด ์ฃผ์ด์ก์ ๋, ์๋ ค์ง ์ ๋ง๋๊ธฐ ์กฐ๊ฐ์ ์ด ๊ฐ์๋ฅผ ๊ตฌํด๋ผ.
์ ๋ ฅ์์
()(((()())(())()))(())
์ถ๋ ฅ์์
17
const solution = (str) => {
let answer = 0;
let stack = [];
// ์ฌ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ๋ง๋๊ธฐ์ ์์์ ๋๋ ๋ ์ด์ ์ ์์์ ์ด๋ค. -> stack์ ํธ์
// ๋ซ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ๋ง๋๊ธฐ์ ๋ซ๋์ ์ธ์ง ๋ ์ด์ ์ ๋ซ๋์ ์ธ์ง ํ์ธํด์ผํ๋ค -> ๋ฐ๋ก ์์ ์ดํด๋ณธ๋ค
for (let i = 0; i < str.length; i++) {
if (str[i] === '(') { // str[i]๊ฐ ์ฌ๋ ๊ดํธ์ผ ๊ฒฝ์ฐ
stack.push(str[i]);
} else { // str[i]๊ฐ ๋ซ๋ ๊ดํธ์ผ ๊ฒฝ์ฐ
stack.pop();
if (str[i - 1] === '(') { // ๋ ์ด์ ์ธ ๊ฒฝ์ฐ
// ๋ง๋๊ธฐ๊ฐ ๋ช ๊ฐ๊ฐ ์๋ฆฌ๋ ์ง answer์ ์นด์ดํ
-> stack์ length ๋์
answer += stack.length;
} else { // ๋ง๋๊ธฐ์ ๋์ธ ๊ฒฝ์ฐ
// ๋ซ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ๋ฌด์กฐ๊ฑด ํ๋๋ popํด์ผํ๋ค.
answer++;
}
}
}
return answer;
}
const str = "()(((()())(())()))(())";
console.log(solution(str));
'๐กAlgorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฃ๊ตฌ์กฐ | ๋งํฌ๋๋ฆฌ์คํธ(Linked List) with JS (0) | 2021.09.28 |
---|---|
์๋ฃ๊ตฌ์กฐ | ํด์(Hash) with JS (0) | 2021.09.24 |