[ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ๋ฐ๋ฅธ ๊ดํธ (level.2)
๋ฌธ์ ๋งํฌ
https://programmers.co.kr/learn/courses/30/lessons/12909
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ์ฌ๋ฐ๋ฅธ ๊ดํธ
๊ดํธ๊ฐ ๋ฐ๋ฅด๊ฒ ์ง์ง์ด์ก๋ค๋ ๊ฒ์ '(' ๋ฌธ์๋ก ์ด๋ ธ์ผ๋ฉด ๋ฐ๋์ ์ง์ง์ด์ ')' ๋ฌธ์๋ก ๋ซํ์ผ ํ๋ค๋ ๋ป์ ๋๋ค. ์๋ฅผ ๋ค์ด "()()" ๋๋ "(())()" ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ ๋๋ค. ")()(" ๋๋ "(()(" ๋ ์ฌ๋ฐ๋ฅด์ง ์์
programmers.co.kr
๋์ ํ์ด
- ์๋ฃํ list๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค. list๋ฅผ ์ฌ์ฉํ์ง๋ง๊ณ ๋ฌด์กฐ๊ฑด deque๋ฅผ ์ฌ์ฉํ์ (์ค์ ๋ก list๋ฅผ ๋ชจ๋ deque๋ก ๋ฐ๊พธ์๋๋ ํจ์จ์ฑํ ์คํธ ํต๊ณผ๋ฅผ ํ์๋ค.)
- ๊ดํธ๋ () ์ด๋ ๊ฒ ๋ซํ์ผ๋ง True๋ก ์ธ์ํด์ผํ๋ค.
- s์ ์ฃผ์ด์ง ๊ดํธ๋ค์ ํ๊ฐ์ฉ left ๋ณ์์ ์ ์ฅํด๋๊ณ , ๋ค์ ๋ณ์๋ฅผ ๋ณด๋ฉด์ () ๋ซํ๋ ๊ตฌ์กฐ๊ฐ ๋์ค๋ฉด left์์ ์์ ์ฃผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ True/False๋ฅผ ๊ตฌ๋ณํด๋๋ค.
from collections import deque
def solution(s):
right = deque(s)
left = deque()
while right:
r = right.popleft()
if len(left) == 0:
if r != ')':
left.append(r)
else:
left.append('999')
break
else:
if left[-1] == '(':
if r == ')':
left.pop()
else:
left.append(r)
if len(left) == 0:
answer = True
else:
answer = False
return answer
๋ฌธ์ ๊ฐ ๊ฐํธ๋์ด์ ์ข์์๋ฅผ ๋ง์ด ๋ฐ์ ํ์ด๋ ์ฐธ๊ณ ํ๊ธฐ ์ด๋ ค์ ๋ค. ์ธํฐ๋ท์ ํตํด ํ์ด์ฌ์ผ๋ก ํผ ๋ค๋ฅธ ์ฌ๋ ํ์ด๋ฅผ ์ดํด๋ณด๋, ๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ฌ๋๋ค์ด ๋ง์๋ค. ์ฌ์ค ๋๋ ์ด์ ์ ๊ดํธ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ์ด๋ฅผ ์งํํด ๋๊ฐ์๋ค. ์ด์ฒ๋ผ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์ด๋ณผ์๋ก ํ์ด ๊ณผ์ ์ ๋ํ ๊ณ ๋ฏผ์ ์๊ฐ์ด ์ค์ด๋๋ ๊ฒ์ ๋๊ผ๋ค. ๋ ธ๋ ฅ์ ๋ฐฐ์ ํ์ง์๋๋ค!!! ์ด์ฌํ ๊พธ์คํ๋ง ํ์ ใ ใ