Skip to content

Commit 8472ed5

Browse files
committed
valid parentheses solution
1 parent bb43597 commit 8472ed5

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/***
2+
*
3+
* @problem
4+
* - ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง์„ ์ด๋ฃจ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
5+
*
6+
* @constraints
7+
* - ๋ฌธ์ž์—ด์€ ์˜ค์ง '(', ')', '{', '}', '[', ']' ๋ฌธ์ž๋กœ๋งŒ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
8+
* - ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 0 ์ด์ƒ 10^4 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
9+
*
10+
* @example
11+
* - ์ž…๋ ฅ: "()"
12+
* ์ถœ๋ ฅ: true
13+
* - ์ž…๋ ฅ: "(){}"
14+
* ์ถœ๋ ฅ: true
15+
* - ์ž…๋ ฅ: "(]"
16+
* ์ถœ๋ ฅ: false
17+
* - ์ž…๋ ฅ: "([)]"
18+
* ์ถœ๋ ฅ: false
19+
* - ์ž…๋ ฅ: "{}"
20+
* ์ถœ๋ ฅ: true
21+
*
22+
* @description
23+
* - ์—ฌ๋Š” ๊ด„ํ˜ธ๋Š” ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ(๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์—ฌ๋Š” ๊ด„ํ˜ธ)์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
24+
* - ๋‹ซ๋Š” ๊ด„ํ˜ธ์™€ ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ๊ฐ€ ์ง์„ ์ด๋ฃจ์ง€ ์•Š์œผ๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
25+
* - ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ˆœํšŒํ•œ ํ›„ ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด ์œ ํšจํ•œ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
26+
*
27+
* @complexity
28+
* - ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
29+
* ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
30+
* - ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
31+
* ์Šคํƒ์— ์ €์žฅ๋˜๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด์— ๋น„๋ก€ํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
32+
*
33+
*/
34+
function isValid(s: string): boolean {
35+
// ๊ด„ํ˜ธ ์Œ์„ ์ €์žฅํ•˜๋Š” Map ์ƒ์„ฑ
36+
const map = new Map<string, string>([
37+
[')', '('],
38+
['}', '{'],
39+
[']', '[']
40+
]);
41+
42+
// ์Šคํƒ ์ดˆ๊ธฐํ™”
43+
const stack: string[] = [];
44+
45+
// ๋ฌธ์ž์—ด์„ ์ˆœํšŒ
46+
for (const char of s) {
47+
if (map.has(char)) {
48+
// ๋‹ซ๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ popํ•˜์—ฌ ๋น„๊ต
49+
const topElement = stack.length > 0 ? stack.pop() : undefined;
50+
if (topElement !== map.get(char)) {
51+
return false; // ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ
52+
}
53+
} else {
54+
// ์—ฌ๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ ์Šคํƒ์— push
55+
stack.push(char);
56+
}
57+
}
58+
59+
// ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋ฉด ์œ ํšจํ•œ ๊ด„ํ˜ธ(๋ชจ๋“  ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์™€ ์ง์„ ์ด๋ฃธ)
60+
return stack.length === 0;
61+
}
62+
63+
console.log(isValid("()")); // true
64+
console.log(isValid("(){}")); // true
65+
console.log(isValid("(]")); // false
66+
console.log(isValid("([)]")); // false
67+
console.log(isValid("{[]}")); // true

0 commit comments

Comments
ย (0)