|
| 1 | +/** |
| 2 | + * ์ฃผ์ด์ง ๋ฌธ์์ด s๊ฐ ์ ํจํ ๊ดํธ ๋ฌธ์์ด์ธ์ง ํ์ธ. |
| 3 | + * @param {string} s - ์
๋ ฅ ๋ฌธ์์ด (๊ดํธ๋ง ํฌํจ๋จ) |
| 4 | + * @returns {boolean} - ์ ํจํ ๊ดํธ ๋ฌธ์์ด์ด๋ฉด true, ์๋๋ฉด false |
| 5 | + * |
| 6 | + * ์๊ฐ ๋ณต์ก๋: O(n) |
| 7 | + * - ๋ฌธ์์ด์ ๊ธธ์ด n๋งํผ ํ ๋ฒ์ฉ ์ํํ๋ฉฐ, ๊ฐ ๋ฌธ์์ ๋ํด ๊ณ ์ ๋ ์ฐ์ฐ(์คํ ์กฐ์)์ ์ํ. |
| 8 | + * |
| 9 | + * ๊ณต๊ฐ ๋ณต์ก๋: O(n) |
| 10 | + * - ์ต์
์ ๊ฒฝ์ฐ ์คํ์ ์ฌ๋ ๊ดํธ n๊ฐ๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก O(n)์ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. |
| 11 | + */ |
| 12 | +function isValid(s: string): boolean { |
| 13 | + if (s.length % 2 !== 0) return false; |
| 14 | + if (s === '') return true; |
| 15 | + |
| 16 | + const openingBrackets = ['(', '{', '[']; |
| 17 | + const bracketSets: Record<string, string> = { '(': ')', '{': '}', '[': ']' }; |
| 18 | + const bracketStack: string[] = []; |
| 19 | + |
| 20 | + for (const char of s) { |
| 21 | + // ์ฌ๋ ๊ฒฝ์ฐ, ์คํ์ ์ถ๊ฐ |
| 22 | + if (openingBrackets.includes(char)) { |
| 23 | + bracketStack.push(char); |
| 24 | + } else { |
| 25 | + // ๋ซ๋ ๊ดํธ ๊ฒฝ์ฐ, ์คํ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐํ ์ฌ๋ ๊ดํธ๋ฅผ ๊บผ๋ |
| 26 | + const lastOpeningBracket = bracketStack.pop(); |
| 27 | + // bracketSets ๊ณผ ์ ํจํ์ง ์์ ๊ดํธ์ธ ๊ฒฝ์ฐ |
| 28 | + if (bracketSets[lastOpeningBracket!] !== char) { |
| 29 | + return false; |
| 30 | + } |
| 31 | + } |
| 32 | + } |
| 33 | + |
| 34 | + // ์คํ์ด ๋น์ด์์ผ๋ฉด ๋ชจ๋ ๊ดํธ๊ฐ ์ ํจํ ๊ฒฝ์ฐ |
| 35 | + return bracketStack.length === 0; |
| 36 | +} |
0 commit comments