์ค๋์ ์ฝ๋์นดํ! ์ญ์ ์ฝ์ง ์๋ค.
์ฌ๋๋ค์ด๋ ์ด์ผ๊ธฐ ํด๋ณธ ๊ฒฐ๊ณผ, ์ด์ ์ ๋ก๋ง์ -> ์ ์ํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ฒ๋ผ
์ผ์ ์กฐ๊ฑด๋ค์ ๋ฏธ๋ฆฌ ๋ฆฌ์คํธ๋ก ์ ์ธํด๋๊ณ ํ์ด์ผ ํ๋ค๋๋,
๋์
๋๋ฆฌ์ ๋ฏธ๋ฆฌ ๊ดํธ๋ค์ key, value๋ก ์ ์ธํด๋์ด ์ง์ ๋ง์ถฐ๋ ๋ค ํ์ด์ผ ํ๋ค๋๋..
๋ค์ํ ์์ด๋์ด๊ฐ ๋์๋ค.
ํ์ง๋ง ์ฌ๋๋ง๋ค ํ์ด๋ธ ์ฝ๋๋ ๋ชจ๋ ๋ค๋ฅด๋ค..! ์งฑ์ ๊ธฐํด
ํ๋์๋ ๋๊ฐ์ ์ฝ๋๋ ์๋ค๊ณ ..
s๋ ์ฌ๋ฌ ๊ดํธ๋ค๋ก ์ด๋ฃจ์ด์ง String ์ธ์์ ๋๋ค.
s๊ฐ ์ ํจํ ํํ์ธ์ง ์๋์ง true/false๋ก ๋ฐํํด์ฃผ์ธ์.
- ์ข ๋ฅ๋ '(', ')', '[', ']', '{', '}' ์ผ๋ก ์ด 6๊ฐ ์์ต๋๋ค. ์๋์ ๊ฒฝ์ฐ ์ ํจํฉ๋๋ค.
: ํ ๋ฒ ๊ดํธ๋ฅผ ์์ํ์ผ๋ฉด, ๊ฐ์ ๊ดํธ๋ก ๋๋ด์ผ ํ๋ค.
๊ดํธ ์์๊ฐ ๋ง์์ผ ํ๋ค.- ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ต๋๋ค.
s = "()" return true - s = "()[]{}" return true - s = "(]" return false - s = "([)]" return false - s = "{[]}" return true
def is_valid(string): check_each = { '(':')', '{':'}', '[':']' } if len(string)%2 == 1: return False else: for i in range(len(string)%2+1): if string[i] in check_each.keys(): if string[-(i+1)] == check_each[string[i]]: return True else: return False else: return False
์ค๋๋ ์ญ์ ๋์ ์์ ๋๋ฝ๋ค
์ฐ์ dictionary ๋ด์ key, value ํ์์ผ๋ก ๊ดํธ๋ฅผ ๊ฐ๊ฐ ์ ์ธํด๋๊ธฐ๋ก ํ๋ค.
์ฃผ์ด์ง ๋งค๊ฐ๋ณ์์ len()
ํจ์๋ฅผ ์ฌ์ฉํด์ ๊ธธ์ด๋ฅผ ๊ตฌํ์ ๋,
ํ์์ธ ๊ฒฝ์ฐ๋ ๋ฌด์กฐ๊ฑด False๋ก ๋ฆฌํดํ๋ค.
์ง์์ธ ๊ฒฝ์ฐ๋ง ํด๋นํ๋๋ก ์กฐ๊ฑด๋ฌธ์ ๊ฑธ์ด์ฃผ๋๋ฐ
์ฒ์๊ณผ ๋์ ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋ฉด์ dictionary๋ด๋ถ์ ๋ค์ด์๋ key, value์ง๊ณผ ์ผ์นํ๋์ง ๋น๊ต๋ฅผ ํด๋ณธ๋ค.
ํ ์ ๋จ์๋ก ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ string ์ ์ฒด์ ๊ธธ์ด๋ฅผ ๋ฐ์ผ๋ก ๋๋ ๊ฒ+1๋งํผ์ ๊ณ์ฐํ๋๋ก ํ๋ค.
(ํ์๋ง ๋ค์ด์จ ๊ฒฝ์ฐ, 2%2 ->1, but i๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์..!)
๋ง์ฝ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ string ๋ด ์ฒซ๋ฒ์งธ ๊ดํธ๊ฐ dictionary๋ด key๋ก ์กด์ฌํ๋ค๋ฉด
string์ ๊ฐ์ฅ ๋ง์ง๋ง ๊ดํธ๊ฐ ํด๋น key์ value ๊ฐ์ด๋ผ๋ฉด ์ผ์นํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๊ธฐ!
์ด๋ฐ ์์ผ๋ก ๊ฒ์ฌํ๋๋ก ํ๋ค.
ํ์ง๋ง ๋์ ๋ก์ง์๋ ์น๋ช
์ ์ธ ์ค๋ฅ๊ฐ ์๋ค.
(())[] ๐๐ป ์ด ๊ฒฝ์ฐ๋ ๋ด๊ฐ ๋ง๋ ๋ก์ง ์ค ์ด๋๊ณณ์์๋ ๊ฒ์ฌ๋์ง ๋ชปํ๋ ๊ฒ..!!!!!!!
์ด๋ ๊ฒ ๋์ค์ ๋ฒฝ์ ๋ง๋ฌ๋ค๊ณ ์๊ฐํ๋ ๋์ด์ ๋จธ๋ฆฌ๊ฐ ๋์๊ฐ์ง๋ฅผ ์์๋ค.
ํด๋น ๊ฒฝ์ฐ๋ ๋ด๊ฐ ์ง๊ธ๊น์ง ํ ์๊ฐ์ ๋ชจ๋ ๋ค์ง๊ณ ๋ค์ ํด์ผํ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ..!
def is_valid(string):
left = ['(', '{', '[']
right = [')', '}', ']']
stack = []
for letter in string:
if letter in left:
stack.append(letter)
elif letter in right:
if len(stack) <= 0:
return False
if left.index(stack.pop()) != right.index(letter):
return False
return len(stack) == 0
๊ทธ๋์ ๋ชจ๋ธ ์๋ฃจ์
์ ๊ณผ์ฐ ๋ญ๋ผ๊ณ ํ์๊น?
๋์ if ๋ก ์ ์ฒ ๋ ๋ก์ง๋ณด๋ค ํจ์ฌ ๋์ ์ ๋ค์ด์จ๋ค.
์์ ์ผ์ชฝ์ ๋ค์ด๊ฐ ๊ดํธ๋ค, ์ค๋ฅธ์ชฝ์ ๋ค์ด๊ฐ ๊ดํธ๋ค์ ๋ฐ๋ก list๋ก ์ ์ธํด๋๊ณ
string์ ๊ฐ์๋๋ก for loop์ ๋๋ฆฌ๋ฉด์ ๋น๊ตํ๋๋ฐ
๋ง์ฝ ์ผ์ชฝ ๋ฆฌ์คํธ ๋ด์ string์ ๊ดํธ๊ฐ ์กด์ฌํ๋ฉด ๋ฌด์กฐ๊ฑด stack์ด๋ผ๋ ๋น list ๋ด์ ์ถ๊ฐํ๋ค.
์ค๋ฅธ์ชฝ ๋ฆฌ์คํธ์ ํด๋นํ๋ ๊ดํธ๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ stack์ ํ์ธํด์
stack์ด ๋น์ด์๋ค๋ฉด ํด๋น ๊ดํธ์ ์ง์ด ๋๋ ์ผ์ชฝ ๊ดํธ๊ฐ ์๋ค๋ ๋ป์ด๋ฏ๋ก
return False
!
ํ๋ ๊ดํธ ๊ดํธ ํ๋๊น ๊ฒ์ํํธ ๋ถ๊ดดํ์ ์ฌ๊ฑฐ๊ฐ์
๊ดํธ.. ๊ดํธ.. ํ..๊ด..