Skip to content

Commit cda7e0a

Browse files
committed
week 6 - valid parentheses
1 parent 70c9b19 commit cda7e0a

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
2+
# - s์˜ ๊ธธ์ด๋งŒํผ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
3+
# ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
4+
# - stack์„ list๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ s[:-1]๊นŒ์ง€ ๋ชจ๋“  ๋‹ค๋ฅธ ์™ผ์ชฝ ๊ด„ํ˜ธ์ผ ๋•Œ O(n)๊นŒ์ง€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Œ
5+
6+
class Solution:
7+
# ์™ผ์ชฝ ๊ด„ํ˜ธ๋Š” stack์— ์ €์žฅํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ,
8+
# stack์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ ์™ผ์ชฝ ๊ด„ํ˜ธ์™€ ์Œ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜์—ฌ
9+
# ๋ชจ๋“  ๊ฒฝ์šฐ์— ์Œ์ด ๋งž์œผ๋ฉด ์ด ๋ฌธ์ž์—ด์ด validํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
10+
# ๋งŒ์•ฝ ์œ ํšจ์„ฑ์—์„œ falsyํ•œ ๊ฒฝ์šฐ์—๋Š” early return ํ•ด์ค€๋‹ค.
11+
def isValid(self, s: str) -> bool:
12+
stack = []
13+
14+
for ss in s:
15+
if ss in ('(', '[', '{'):
16+
# ์™ผ์ชฝ ๊ด„ํ˜ธ๋Š” stack์— ์ €์žฅ
17+
stack.append(ss)
18+
else:
19+
# ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๋Š” stack ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์œ ํšจ์„ฑ ํ™•์ธ
20+
if not stack:
21+
# stack์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์Œ์„ ๋งž์ถœ ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ s๊ฐ€ invalidํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
22+
return False
23+
24+
# stack์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ์™€ ํ˜„์žฌ ํ™•์ธํ•  ๋ฌธ์ž์—ด์˜ ์Œ์ด ๋งž๋Š”์ง€ ํ™•์ธ
25+
last_ss = stack[-1]
26+
if any([
27+
last_ss == '(' and ss == ')',
28+
last_ss == '[' and ss == ']',
29+
last_ss == '{' and ss == '}',
30+
]):
31+
# ์Œ์ด ๋งž๋‹ค๋ฉด stack์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด์€ pop
32+
stack.pop()
33+
else:
34+
# ์Œ์ด ์•ˆ ๋งž๋Š” ๊ฒฝ์šฐ
35+
return False
36+
if stack:
37+
# ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ๋Œ์•˜๋Š”๋ฐ๋„, stack์— ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ๋‚จ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ
38+
return False
39+
40+
# ์œ„์˜ ๋ชจ๋“  invalidํ•œ ๊ฒฝ์šฐ๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด validํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
41+
return True

0 commit comments

Comments
ย (0)