๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 4949 - ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

by YWTechIT 2021. 7. 5.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 4949 - ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

๋ฌธ์ œ: ๋ฐฑ์ค€ 4949 - ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ


๐Ÿ’ก ๋‚˜์˜ ํ’€์ด

๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ์ž˜ ๋”ฐ์ ธ์•ผ ํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰ ์กฐ๊ฑด(์ง์„ ์ด๋ฃจ๋Š” ๋‘ ๊ด„ํ˜ธ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ฌธ์ž์—ด๋„ ๊ท ํ˜•์ด ์žกํ˜€์•ผ ํ•œ๋‹ค.)์€ ๋ฌธ์ž์—ด ๊ณต๋ฐฑ์„ ๋˜‘๊ฐ™์ด ์ค˜์•ผ ํ•˜๋Š” ๊ฑด๊ฐ€?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๋ฉด์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ์— ์ฃผ์–ด์ ธ์žˆ์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์˜ฌ๋ฐ”๋ฅธ๊ด„ํ˜ธ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ T.C๋ฅผ ๋„ฃ์–ด๊ฐ€๋ฉด์„œ ์—๋Ÿฌ๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ฒŒ ๋กœ์ง์„ ์งœ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

 

๋…ผ์™ธ๋กœ while True์™€ while 1์˜ ์ฐจ์ด๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ์งˆ๋ฌธ๋“ค์ด ๊ฝค ์žˆ์—ˆ๋Š”๋ฐ, ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด python 3์—์„œ ๋‘ ๊ฐœ์˜ ์ฝ”๋“œ์˜ ์‹œ๊ฐ„ ์ฐจ์ด๋Š” ์—†๋‹ค. ์กฐ๊ธˆ ๋ง๋ถ™์—ฌ์„œ ๋งํ•˜์ž๋ฉด python 2์—์„œ๋Š” while 1์ด ๋” ์•ฝ 3 ~ 4์ดˆ ๊ฐ€๋Ÿ‰ ๋” ๋น ๋ฅธ๋ฐ ์™œ ๊ทธ๋Ÿฌ๋ƒ๋ฉด python 2์—์„œ๋Š” True ํ‚ค์›Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ python 3์—์„œ๋Š” True ํ‚ค์›Œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, while 1, while True์˜ ์‹คํ–‰์‹œ๊ฐ„์€ ๋™์ผํ•˜๋‹ค. (stack_over_flow)

 

  1. ์—ฌ๋Š” ๊ด„ํ˜ธ((, [)๋Š” stack์— ๋„ฃ๋Š”๋‹ค.
  2. stack์ด ์žˆ์œผ๋ฉด์„œ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ stack[-1]๊ณผ ์ง์ด ๋งž๋Š” ๊ด„ํ˜ธ๋ฉด pop์„ ์‹œํ‚ค๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด flag๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค.
  3. stack์ด ์—†์œผ๋ฉด์„œ ๋‹ซํžŒ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ •์ƒ์ ์œผ๋กœ ์ง์ด ๋งž์ง€ ์•Š์œผ๋ฏ€๋กœ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ flag๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค.
  4. flag == True์ด๋ฉด์„œ(์ •์ƒ์ ์ธ ๊ด„ํ˜ธ) not stack์ด๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๊ณ  ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ ์—ด์ด๋‹ค.

 

# ๋‚˜์˜ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

while True:
    s = input().rstrip()
    if s == '.':    # ์ข…๋ฃŒ ์กฐ๊ฑด
        break

    stack = []
    flag = True    # ์ง์„ ์ด๋ฃจ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

    for i in range(len(s)):
        if s[i] == '(' or s[i] == '[':
            stack.append(s[i])

        elif stack and (s[i] == ')' or s[i] == ']'):  # stack์€ ์žˆ์ง€๋งŒ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ
            if s[i] == ')' and stack[-1] == '(':
                stack.pop()
            elif s[i] == ']' and stack[-1] == '[':
                stack.pop()
            else:    # (])
                flag = False

        elif not stack and (s[i] == ')' or s[i] == ']'):  # stack์ด ์—†์œผ๋ฉด์„œ ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ, )(
            flag = False

    if flag and not stack:
        print('yes')
    else:
        print('no')

 

# ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

while 1:
    string = input().rstrip()
    stack = []
    true_flag = 1

    for cha in string:
        if cha == '(' or cha == '[':
            stack.append(cha)
        elif cha == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                true_flag = 0
                break
        elif cha == ']':
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                true_flag = 0
                break

    if string == '.':
        break

    print("yes" if true_flag and not stack else "no")
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€