[๋ฐฑ์ค/python] 4949๋ฒ : ๊ท ํ์กํ ์ธ์
๋ฌธ์
์ธ๊ณ๋ ๊ท ํ์ด ์ ์กํ์์ด์ผ ํ๋ค. ์๊ณผ ์, ๋น๊ณผ ์ด๋ ๊ทธ๋ฆฌ๊ณ ์ผ์ชฝ ๊ดํธ์ ์ค๋ฅธ์ชฝ ๊ดํธ์ฒ๋ผ ๋ง์ด๋ค.
์ ๋ฏผ์ด์ ์๋ฌด๋ ์ด๋ค ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ๊ดํธ๋ค์ ๊ท ํ์ด ์ ๋ง์ถฐ์ ธ ์๋์ง ํ๋จํ๋ ํ๋ก๊ทธ๋จ์ ์ง๋ ๊ฒ์ด๋ค.
๋ฌธ์์ด์ ํฌํจ๋๋ ๊ดํธ๋ ์๊ดํธ("()") ์ ๋๊ดํธ("[]")๋ก 2์ข ๋ฅ์ด๊ณ , ๋ฌธ์์ด์ด ๊ท ํ์ ์ด๋ฃจ๋ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
- ๋ชจ๋ ์ผ์ชฝ ์๊ดํธ("(")๋ ์ค๋ฅธ์ชฝ ์๊ดํธ(")")์๋ง ์ง์ ์ด๋ค์ผ ํ๋ค.
- ๋ชจ๋ ์ผ์ชฝ ๋๊ดํธ("[")๋ ์ค๋ฅธ์ชฝ ๋๊ดํธ("]")์๋ง ์ง์ ์ด๋ค์ผ ํ๋ค.
- ๋ชจ๋ ์ค๋ฅธ์ชฝ ๊ดํธ๋ค์ ์์ ๊ณผ ์ง์ ์ด๋ฃฐ ์ ์๋ ์ผ์ชฝ ๊ดํธ๊ฐ ์กด์ฌํ๋ค.
- ๋ชจ๋ ๊ดํธ๋ค์ ์ง์ 1:1 ๋งค์นญ๋ง ๊ฐ๋ฅํ๋ค. ์ฆ, ๊ดํธ ํ๋๊ฐ ๋ ์ด์์ ๊ดํธ์ ์ง์ง์ด์ง์ง ์๋๋ค.
- ์ง์ ์ด๋ฃจ๋ ๋ ๊ดํธ๊ฐ ์์ ๋, ๊ทธ ์ฌ์ด์ ์๋ ๋ฌธ์์ด๋ ๊ท ํ์ด ์กํ์ผ ํ๋ค.
์ ๋ฏผ์ด๋ฅผ ๋์ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋ ๊ท ํ์กํ ๋ฌธ์์ด์ธ์ง ์๋์ง๋ฅผ ํ๋จํด๋ณด์.
์ ๋ ฅ
ํ๋ ๋๋ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ์ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๊ฐ ๋ฌธ์์ด์ ์๋ฌธ ์ํ๋ฒณ, ๊ณต๋ฐฑ, ์๊ดํธ("( )") ๋๊ดํธ("[ ]")๋ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100๊ธ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ ๋ ฅ์ ์ข ๋ฃ์กฐ๊ฑด์ผ๋ก ๋งจ ๋ง์ง๋ง์ ์ ํ๋(".")๊ฐ ๋ค์ด์จ๋ค.
์ถ๋ ฅ
๊ฐ ์ค๋ง๋ค ํด๋น ๋ฌธ์์ด์ด ๊ท ํ์ ์ด๋ฃจ๊ณ ์์ผ๋ฉด "yes"๋ฅผ, ์๋๋ฉด "no"๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต
line = []
find = {')': '(', ']': '['}
line.append(input())
while line[-1] != ".":
line.append(input())
for i in line[:-1:]:
result = "yes"
stack = []
for n in i:
if n in find.values(): # (, [ ๊ฐ ๋ค์ด์ฌ ๋
stack.append(n)
elif n in find: # ), ] ๊ฐ ๋ค์ด์ฌ ๋
if stack and stack[-1] == find[n]: # stack์ ๋ง์ง๋ง ๊ฐ์ด ๋ด ์ง์ด๋ผ๋ฉด
stack.pop()
else:
result = "no"
break
if stack: # stack์ ( ๋ [๊ฐ ์๋ ์ํ๋ก ๋๋ฌ์ ๋
result = "no"
print(result)
๋ค์ด์จ ๋ฌธ์ฅ์ ํ๊ธ์์ฉ ํ์ํด๋ณด๋ฉด์ ์ฌ๋ ๊ดํธ (, [ ๊ฐ ๋์ค๋ฉด stack์ ๋ฃ๊ณ
๋ซ๋ ๊ดํธ ), ] ๊ฐ ๋์ค๋ฉด stack.pop์ ํ ํ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด๋ค.
find = {')': '(', ']': '['}
dictionary๋ฅผ ์ด์ฉํ find์ ๊ดํธ์ ์ง์ ๋ง์ถฐ ์ ์ฅํด๋๋ค.
ํค๋ ๋ซ๋ ๊ดํธ๋ก ํ๊ณ ๊ฐ์ ์ฌ๋ ๊ดํธ๋ก ํ๋ค.
for i in line[:-1:]:
result = "yes"
stack = []
for n in i:
๋ง์ง๋ง์ ๋ค์ด์ค๋ "."๋ฌธ์ฅ์ ์ ์ธํ๊ณ ๊ฐ ๋ฌธ์ฅ์ ๊ธ์๋ฅผ ํ๋์ฉ ๋น๊ตํ๋ค.
์ด๋ ์ต์ข ์ ์ผ๋ก ๊ตฌํ๊ณ ์ํ๋ result๊ฐ์ "yes"๋ฅผ default๋ก ์ค์ ํ๊ณ stack์ ๋ฌธ์ฅ์ด ์์ํ ๋ ๋น์์ค๋ค.
if n in find.values(): # (, [ ๊ฐ ๋ค์ด์ฌ ๋
stack.append(n)
๊ธ์๊ฐ ์ฌ๋ ๊ดํธ (๋ [์ผ ๋, stack์ ๋ฃ๋๋ค.
elif n in find: # ), ] ๊ฐ ๋ค์ด์ฌ ๋
if stack and stack[-1] == find[n]: # stack์ ๋ง์ง๋ง ๊ฐ์ด ๋ด ์ง์ด๋ผ๋ฉด
stack.pop()
else:
result = "no"
break
๊ธ์๊ฐ ๋ซ๋ ๊ดํธ ), ]์ผ ๋, ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ํ๋์ ์ทจํด์ผํ๋ค.
๋ง์ฝ stack์ ๋ง์ง๋ง ๊ฐ์ด find์ ์ ์ฅ๋ ๋ด ์ง์ด๋ผ๋ฉด stack.pop()์ ์ด์ฉํ์ฌ stack์์ ์ ๊ฑฐํด์ค๋ค.
์ด ์ธ์ stack์ ๋ง์ง๋ง ๊ฐ์ด ๋ด ์ง์ด ์๋๊ฑฐ๋ ๋น์ด์์ ๋ ๋ฑ์ ์ํฉ์ด๋ผ๋ฉด result์ "no"๋ก ๋ฐ๊พธ์ด์ค๋ค.
์ด์ ๋์ด์ ํด๋น ๋ฌธ์ฅ์ ๊ธ์๋ฅผ ํ์ธํ ํ์๊ฐ ์์ผ๋ฏ๋ก break๋ฅผ ์ด์ฉํ์ฌ for๋ฌธ์ ๋น ์ ธ๋์จ๋ค.
if stack: # stack์ ( ๋ [๊ฐ ์๋ ์ํ๋ก ๋๋ฌ์ ๋
result = "no"
print(result)
ํด๋น ๋ฌธ์ฅ์ ๋ํ ๊ฒฐ๊ณผ ๊ฐ result๋ฅผ ์ถ๋ ฅํด ์ฃผ๊ธฐ ์ , ์ง์ ๋ง์ถ์ง ๋ชปํ ๊ดํธ๊ฐ stack์ ์๋์ง ํ์ธํ๊ณ
stack์ ๊ฐ์ด ์๋ค๋ฉด result๋ฅผ "no"๋ก ๋ฐ๊ฟ์ค ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 1021๋ฒ : ํ์ ํ๋ ํ (0) | 2021.03.12 |
---|---|
[๋ฐฑ์ค/python] 1874๋ฒ : ์คํ ์์ด (0) | 2021.03.12 |
[๋ฐฑ์ค/python] 11651๋ฒ : ์ขํ ์ ๋ ฌํ๊ธฐ 2 (0) | 2021.03.11 |
[๋ฐฑ์ค/python] 2805๋ฒ : ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2021.03.11 |
[๋ฐฑ์ค/python] 1929๋ฒ : ์์ ๊ตฌํ๊ธฐ (0) | 2021.03.09 |