๋ฐ์ํ
๋ฌธ์
- ํค์๋: ๋ฌธ์์ด ํ์ , ๊ดํธ ์ง ๋ง์ถ๊ธฐ
- ๊ดํธ์ ์ง์ ๋ง์ถ ๋, ๋ซ๋ ๊ดํธ๊ฐ ๋์ค๋ฉด ๋ฐ๋ก ์ง์ (top → stack)์ ๊ฐ์ ๋ชจ์์ ์ฌ๋ ๊ดํธ๊ฐ ์กด์ฌํด์ผ ํ๋ค.
๋์ ํ์ด
- ์๊ฐ๋ณต์ก๋: O(N²)
// ๋ฌธ์์ด ํ์
function rotateArr(arr) {
arr.push(arr.shift());
return arr;
}
// ๊ดํธ ์ง ๋ง์ถ๊ธฐ
function solution(s) {
let correctCount = 0;
let bracketArr = [...s]
for(let i = 0; i < s.length; i++) {
const bracketStack = [];
let rotatedBracketArr = rotateArr(bracketArr);
let correct = true;
for(const bracket of rotatedBracketArr) {
if(bracket === '(' || bracket === '{' || bracket === '[') {
bracketStack.push(bracket)
} else {
if(bracketStack.length === 0) {
correct = false;
break;
}
const top = bracketStack.length - 1;
else {
if(bracket === ')' && bracketStack[top] === '(') {
bracketStack.pop();
} else if(bracket === '}' && bracketStack[top] === '{') {
bracketStack.pop();
} else {
if(bracketStack[top] === '[') bracketStack.pop();
}
}
}
}
if(correct && bracketStack.length === 0) correctCount++;
bracketArr = [...rotatedBracketArr];
}
return correctCount;
}
rotateArr ํจ์๋ shift()
์ pop()
์ ์ด์ฉํ์ฌ ๋ฐฐ์ด์ ํ ์นธ์ฉ ํ์ ์ํค๊ณ , solution ํจ์๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ ๊ฐ ํ์ ์ ๋ํด ์คํ์ ์ด์ฉํ์ฌ ๊ดํธ์ ์ง์ด ๋ง๋์ง ํ์ธํฉ๋๋ค. ์ฌ๋ ๊ดํธ๋ ์คํ์ ์ถ๊ฐํ๊ณ , ๋ซ๋ ๊ดํธ๋ฅผ ๋ง๋๋ฉด ์คํ์ top๊ณผ ๋น๊ตํ์ฌ ์ง์ด ๋ง์ผ๋ฉด popํฉ๋๋ค. ๋ชจ๋ ๊ดํธ๋ฅผ ํ์ธํ ํ ์คํ์ด ๋น์ด์์ผ๋ฉด ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด๋ก ๊ฐ์ฃผํ๊ณ , ์ด๋ฌํ ๊ฒฝ์ฐ์ ์๋ฅผ ์ธ์ด ์ต์ข
์ ์ผ๋ก ๋ฐํํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ฌธ์์ด์ ๊ธธ์ด๋งํผ ๋ฐ๋ณตํ์ฌ ๋ชจ๋ ํ์ ๊ฒฝ์ฐ๋ฅผ ๊ฒ์ฌํฉ๋๋ค.
๋ฌธ์ ์
shift()
์ฌ์ฉ์ผ๋ก ์ธํ ํฐ ์ฐ์ฐ ๋น์ฉ → ์๊ฐ ๋ณต์ก๋: O(n)- ๋ฌธ์์ด
s
๋ฅผ ๋ฐฐ์ด๋ก ๋ณต์ฌํ๋ ๊ณผ์ ์์์ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ → ์๊ฐ ๋ณต์ก๋: O(n)
๋ค๋ฅธ ํ์ด
- ์๊ฐ๋ณต์ก๋: O(N²)
function solution(s) {
const n = s.length;
let answer = 0;
for (let i = 0; i < s.length; i++) {
const stack = [];
let isCorrect = true;
for (let j = 0; j < n; j++) {
// โ ๊ดํธ ๋ฌธ์์ด์ ํ์ ์ํค๋ฉด์ ์ฐธ์กฐ
const c = s[(i + j) % n];
if (c === "[" || c === "(" || c === "{") {
// โ ์ด๋ฆฐ ๊ดํธ๋ ํธ์
stack.push(c);
} else {
if (stack.length === 0) {
// โ ์ฌ๋ ๊ดํธ๊ฐ ์๋ ๊ฒฝ์ฐ
isCorrect = false;
break;
}
// โ ๋ซํ ๊ดํธ๋ ์คํ์ top๊ณผ ์ง์ด ๋ง๋์ง ๋น๊ต
const top = stack[stack.length - 1];
if (c === "]" && top === "[") {
stack.pop();
} else if (c === ")" && top === "(") {
stack.pop();
} else if (c === "}" && top === "{") {
stack.pop();
} else {
isCorrect = false;
break;
}
}
}
// โ ๋ชจ๋ ๊ดํธ์ ์ง์ด ๋ง๋ ๊ฒฝ์ฐ
if (isCorrect && stack.length === 0) {
answer += 1;
}
}
return answer;
}
์ ์ฒด์ ์ธ ํ์ด๋ ์ ์ฌํ์ง๋ง ๋ฌธ์์ด ํ์ ์ ๊ตฌํํ๋ ๊ณผ์ ์์ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ์ง์ง๋ก ๋ฌธ์์ด์ ํ์ ์ํค๋ฉด ์ฐ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉ
i
: ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์์น,j
:i
์ดํ์ ๋ฑ์ฅํ๋ ๋ฌธ์๋ค์ ์์น- ๋ชจ๋๋ฌ ์ฐ์ฐ์ ํตํด ์ค์ ๋ฐฐ์ด์์์ ์ธ๋ฑ์ค ๊ณ์ฐ
Reference
๋ฐ์ํ
'๐ข Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript][Programmers] ํ ํธ์ง - 2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ (0) | 2024.08.09 |
---|---|
[Javascript][Programmers] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์ (0) | 2024.08.05 |
[Javascript][Programmers] ์ฃผ์ ๊ฐ๊ฒฉ (0) | 2024.08.03 |
[Javascript][Programmers] ๋ฐฉ๋ฌธ ๊ธธ์ด (0) | 2024.07.30 |
[Javascript][Programmers] ์คํจ์จ - 2019 KAKAO (0) | 2024.07.29 |