[๋ฐฑ์ค€/python] 4949๋ฒˆ : ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

2021. 3. 12. 00:18

๋ฌธ์ œ

์„ธ๊ณ„๋Š” ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค. ์–‘๊ณผ ์Œ, ๋น›๊ณผ ์–ด๋‘  ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ ๊ด„ํ˜ธ์™€ ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.

์ •๋ฏผ์ด์˜ ์ž„๋ฌด๋Š” ์–ด๋–ค ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ด„ํ˜ธ๋“ค์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž์ถฐ์ ธ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋Š” ๊ฒƒ์ด๋‹ค.

๋ฌธ์ž์—ด์— ํฌํ•จ๋˜๋Š” ๊ด„ํ˜ธ๋Š” ์†Œ๊ด„ํ˜ธ("()") ์™€ ๋Œ€๊ด„ํ˜ธ("[]")๋กœ 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"๋กœ ๋ฐ”๊ฟ”์ค€ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

BELATED ARTICLES

more