๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/4889)
<์์ ์ ์ธ ๋ฌธ์์ด>
๋ฌธ์
์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ฌ๊ธฐ์ ์์ ์ ์ธ ๋ฌธ์์ด์ ๋ง๋ค๊ธฐ ์ํ ์ต์ ์ฐ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ค๊ณ ํ๋ค. ์์ ์ ์ธ ๋ฌธ์์ด์ ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
1. ๋น ๋ฌธ์์ด์ ์์ ์ ์ด๋ค.
2. S๊ฐ ์์ ์ ์ด๋ผ๋ฉด, {S}๋ ์์ ์ ์ธ ๋ฌธ์์ด์ด๋ค.
3. S์ T๊ฐ ์์ ์ ์ด๋ผ๋ฉด, ST(๋ ๋ฌธ์์ด์ ์ฐ๊ฒฐ)๋ ์์ ์ ์ด๋ค.
{}, {}{}, {{}{}}๋ ์์ ์ ์ธ ๋ฌธ์์ด์ด์ง๋ง, }{, {{}{, {}{๋ ์์ ์ ์ธ ๋ฌธ์์ด์ด ์๋๋ค.
๋ฌธ์์ด์ ํํ ์ ์๋ ์ฐ์ฐ์ ์ฌ๋ ๊ดํธ๋ฅผ ๋ซ๋ ๊ดํธ๋ก ๋ฐ๊พธ๊ฑฐ๋, ๋ซ๋ ๊ดํธ๋ฅผ ์ฌ๋ ๊ดํธ๋ก ๋ฐ๊พธ๋ ๊ฒ 2๊ฐ์ง์ด๋ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ ์ธํธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ๋ฐ์ดํฐ ์ธํธ๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ค์๋ ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ๋ง์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 2000์ ๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํญ์ ๊ธธ์ด๋ ์ง์์ด๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์ '-'๊ฐ ํ ๊ฐ ์ด์ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, ํ ์คํธ ์ผ์ด์ค ๋ฒํธ์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๋ฌธ์์ด์ ์์ ์ ์ผ๋ก ๋ฐ๊พธ๋๋ฐ ํ์ํ ์ต์ ์ฐ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- ์ด๊ธฐ ์ฝ๋: ํ๋ ธ์ต๋๋ค
import sys
if __name__=='__main__':
num=1
while True:
data=sys.stdin.readline().strip()
if data.count('-')>0:
break
stack=[]
cnt=0
for i in data:
if i=='{':
stack.append(i)
else:
if len(stack)==0:
cnt+=1
else:
stack.pop()
if len(stack)%2==0:
cnt+=len(stack)//2
else:
cnt+=len(stack)
print(str(num)+'. '+str(cnt))
num+=1
โ ์ ํ๋ ธ๋๊ฐ?
์์์ ์๋ {{{}๋ ๊ณ ๋ คํ์ง๋ง }}}{ ์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ผ๋ก๋ ๋ฐ๋ก ์ฐพ๋ ์๊ฐ๋ ๋ง์ด ํด์ผ๊ฒ ๋ค ๐ค
- my solution
import sys
if __name__=='__main__':
num=1
while True:
data=sys.stdin.readline().strip()
if data.count('-')>0: # ์ข
๋ฃ ์กฐ๊ฑด
break
stack_left=[] # {
stack_right=[] # }
cnt=0
for i in data:
if i=='{':
stack_left.append(i)
else:
if len(stack_left)==0:
stack_right.append(i)
else: # ์์ ์
stack_left.pop()
# ์์ ์ ์ผ๋ก ๋ฐ๊พธ๋๋ฐ ํ์ํ ์ต์ ์ฐ์ฐ์ ์
if len(stack_left)!=0:
cnt+=len(stack_left)//2+len(stack_left)%2
if len(stack_right)!=0:
cnt+=len(stack_right)//2+len(stack_right)%2
print(str(num)+'. '+str(cnt))
num+=1
- num : ์ถ๋ ฅ๋ฌธ ์ฌ์ฉ
- ๋ฐ์ดํฐ ์ธํธ ์ ๋ ฅ
- ์ข ๋ฃ ์กฐ๊ฑด ์ค์ : -๊ฐ ์กด์ฌํ๋ฉด ์ ๋ ฅ์ ๋ง์ง๋ง
- stack_left : {
- stack_right: }
- '{' ๋ผ๋ฉด stack_left์ ์ถ๊ฐ
- '}' - stack_left๊ฐ ๋น์๋ค๋ฉด stack_right์ ์ถ๊ฐ -> ๊ดํธ๋ฅผ ์ฌ๋ ๊ดํธ๋ก ๋ฐ๊ฟ์ผ ํจ
- stack_left์ ๊ฐ์ด ์๋ค๋ฉด stack_left๋ฅผ pop - ์์ ์ ์ผ๋ก ๋ฐ๊พธ๋๋ฐ ํ์ํ ์ต์ ์ฐ์ฐ์ ์ ๊ณ์ฐ
- stack_left์ stack_right์ ๊ฐ์๋ฅผ ๊ตฌํ์ฌ ๊ฐ๊ฐ 2๋ก ๋๋ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๋ํด์ค
โ ์ ์์ ์ ์ผ๋ก ๋ฐ๊พธ๋๋ฐ ํ์ํ ์ต์ ์ฐ์ฐ์ ์๋ฅผ ์ ๋ ๊ฒ ๊ณ์ฐํ๋๊ฐ?
๋ง์ฝ '}}{{'๋ฅผ ์ ๋ ฅ๋ฐ์ stack_left์ {{ ์ด ์๊ณ stack_right์ }}์ด ์๋ค๊ณ ํ์. ๊ทธ๋ ๋ค๋ฉด ๊ฐ๊ฐ์ ๋ค ๋ฐ๋ ๊ดํธ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ฉ๋ง ๋ฐ๊ฟ {}{}๋ก ๋ง๋ค์ด ์ต์ ์ฐ์ฐ์ ์๋ฅผ 2๋ก ๊ตฌํ ์ ์๋ค.
์ด๋ฐ ์์ผ๋ก ์๊ฐํ์ฌ ๊ฐ๊ฐ์ stack์ 2๊ฐ์ฉ ์ง์ง์ ์ ์๋ค๋ฉด ํ๋๋ง ๋ฐ๊ฟ ์ต์ ์ฐ์ฐ์ผ๋ก ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํ์๋ค.
๋ง์ฝ '}}}{{{' ๋ผ๋ฉด stack_left์ {{{ ์ด ์๊ณ stack_right์ }}}์ด ์๊ฒ ๋๋ค. ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ๊ฐ์ด stack_left์ 2๊ฐ ์ค ํ๋๋ง }๋ก ๋ฐ๊ฟ ์์ ์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ stack_left์๋ { ํ๋๋ง ๋จ๊ฒ ๋๋ค. stack_right๋ ๊ฐ์ด ํ๋๋ง {๋ก ๋ฐ๊ฟ ์์ ์ ์ผ๋ก ๋ฐ๊พผ ํ stack_right์๋ } ํ๋๋ง ๋จ๊ฒ ๋๋ค. {}}{{}๋ก ๊ฐ stack์ ํ๋์ฉ ๋จ์ผ๋ฏ๋ก ๊ฐ์ ๋ฐ๋ ๊ดํธ๋ก ๋ฐ๊พธ๋ฉด ์์ ์ ์ธ ๋ฌธ์์ด์ ๋ง๋ค ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
:) stack_right์ stack_left์ ๊ฐ์๋ฅผ ์ผ ํ 2๋ก ๋๋ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๋ํด์ฃผ๋ฉด ์์ ์ ์ธ ๋ฌธ์์ด๋ก ๋ง๋๋๋ฐ ์ต์ ์ฐ์ฐ์ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
์๊ฐ๐ค
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํ ์๊ฐํด๋ณด๋ฉด stack_left์ stack_right๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋จ์ํ {์ }์ ๊ฐ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์ฃผ์ด์ง ์์ ๋ง๊ณ ๋ ๋ฐ๋ก๋ฅผ ์๊ฐํด๋ผ ์ ์๋๋ก ๋ ธ๋ ฅ-!
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 7576_ํ ๋งํ (0) | 2022.03.21 |
---|---|
[Baekjoon] 10026_์ ๋ก์์ฝ (0) | 2022.03.20 |
[Baekjoon] 1850_์ต๋๊ณต์ฝ์ (0) | 2022.03.17 |
[Baekjoon] 2553_๋ง์ง๋ง ํฉํ ๋ฆฌ์ผ ์ (0) | 2022.03.16 |
[Baekjoon] 9465_์คํฐ์ปค (0) | 2022.03.15 |