๐ค ์ฝ๋ฉํ
์คํธ ์ค๋น/ํ๋ก๊ทธ๋๋จธ์ค
#ํ๋ก๊ทธ๋๋จธ์ค ํ์ด์ฌ Lv.2 #๊ดํธ ํ์ ํ๊ธฐ
seoyeun
2021. 12. 8. 19:20
๋ฌธ์ ์ค๋ช
: ๋ค์ ๊ท์น์ ์งํค๋ ๋ฌธ์์ด์ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๊ณ ์ ์ํฉ๋๋ค.
- (), [], {} ๋ ๋ชจ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
๋ง์ฝ A๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, (A), [A], {A} ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
์๋ฅผ ๋ค์ด, [] ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ฏ๋ก, ([]) ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
๋ง์ฝ A, B๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ผ๋ฉด, AB ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค. ์
๋ฅผ ๋ค์ด, {} ์ ([]) ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด๋ฏ๋ก, {}([]) ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ ๋๋ค.
๋๊ดํธ, ์ค๊ดํธ, ๊ทธ๋ฆฌ๊ณ ์๊ดํธ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค.
์ด s๋ฅผ ์ผ์ชฝ์ผ๋ก x (0 ≤ x < (s์ ๊ธธ์ด)) ์นธ๋งํผ ํ์ ์์ผฐ์ ๋ s๊ฐ ์ฌ๋ฐ๋ฅธ ๊ดํธ ๋ฌธ์์ด์ด ๋๊ฒ ํ๋ x์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑ
๋ฌธ์ ํ์ด
: ํ์ ํ ๋ฌธ์์ด์ right๋ก ๋ณด๊ณ ๋น์ด์๋ left ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ
right์์ ํ๋์ฉ ๋ฝ์์ left๋ก ์ฎ๊ธธ๋
1) ๋น์ด์์ผ๋ฉด ๊ทธ๋ฅ ์ถ๊ฐํด์ค๋ค
2) ๋น์ด์์ง์๋ค๋ฉด left์ ๊ฐ์ด ๋ซํ๊ดํธ์ด๋ฉด break๋ก ๋ฐ๋ณต๋ฌธํ์ถ
3) ๋น์ด์์ง์๊ณ left์ ๊ฐ์ด ๋ซํ๊ดํธ๊ฐ ์๋๋ผ๋ฉด right์ ๋งจ ์ ๋ฌธ์์ด๊ณผ ์ง์ธ์์๋์ง dictionary๋ฅผ ํตํด ํ์ธํ๊ณ ์ง์์ค๋ค.
4) ๋น์ด์์ง์๊ณ left์ ๊ฐ์ด ๋ซํ๊ดํธ๊ฐ ์๋๋ผ๋ฉด right์ ๋งจ ์ ๋ฌธ์์ด๊ณผ ์ง์ธ์์๋ค๋ฉด left๋ฐฐ์ด์ ์ถ๊ฐํด์ค๋ค.
์ต์ข ์ ์ผ๋ก left์ ๋จ์์์ง์๋ค๋ฉด ๋ค ์ง์ด๊ฒ์ด๊ธฐ ๋๋ฌธ์ answer๋ฅผ 1์ถ๊ฐํด์ค๋ค.
# solution
def solution(s):
answer = 0
dic = {'{':'}', '[':']', '(':')'}
for i in range(len(s)):
right = list(s[i:] + s[:i])
left = []
while right:
temp = right.pop(0)
if not left:
left.append(temp)
else:
if left[-1] in ['}', ')', ']']:
break
if dic[left[-1]] == temp:
left.pop()
else:
left.append(temp)
if not left:
answer += 1
return answer