๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 4889_์•ˆ์ •์ ์ธ ๋ฌธ์ž์—ด

๋ฟŒ์•ผ._. 2022. 3. 18. 12:39

Silver I

๋ฌธ์ œ(์ถœ์ฒ˜: 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๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ {์™€ }์˜ ๊ฐœ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

 

์ฃผ์–ด์ง„ ์˜ˆ์ œ ๋ง๊ณ ๋„ ๋ฐ˜๋ก€๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅ-!