๐Ÿ”‘ CS/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[๋ฐฑ์ค€ 2504๋ฒˆ] ๊ด„ํ˜ธ์˜ ๊ฐ’ (python/ํŒŒ์ด์ฌ)

๋ณต๋งŒ 2022. 7. 1. 01:33

์กฐ๊ฑด์„ ์—„์ฒญ ์ถ”๊ฐ€ํ•ด์„œ ํ‘ผ ๊ตฌํ˜„ ๋ฌธ์ œ. ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋”๋Ÿฌ์šด๋ฐ ๋” ์ข‹์€ ํ’€์ด ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๋“ฏ

 

๐ŸŒผ ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/2504

 

2504๋ฒˆ: ๊ด„ํ˜ธ์˜ ๊ฐ’

4๊ฐœ์˜ ๊ธฐํ˜ธ ‘(’, ‘)’, ‘[’, ‘]’๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ด„ํ˜ธ์—ด ์ค‘์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋œ๋‹ค. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ‘()’์™€ ‘[]’๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋‹ค.  ๋งŒ์ผ

www.acmicpc.net

  • ํ‹ฐ์–ด: ์‹ค๋ฒ„ I
  • ๋ถ„๋ฅ˜: ๊ตฌํ˜„, ์ž๋ฃŒ๊ตฌ์กฐ, ์Šคํƒ, ์žฌ๊ท€

 

 

โ— TRIAL 1.

๋”๋ณด๊ธฐ
์ฝ”๋“œ
inputs = list(input())

couple = {'(': ')', '[': ']'}
value = {'(': 2, '[': 3}

while len(inputs) != 1:
    ctr = 0
    new_inputs = []
    while ctr < len(inputs)-1:
        v = inputs[ctr]
        w = inputs[ctr+1]
        if v == '(' or v == '[':
            if w == couple[v]: #() or []: change into number
                ctr += 2
                new_inputs.append(value[v])
            elif type(w) == int: #(w) or {w}: change into 2/3*w
                x = inputs[ctr+2]
                if x == couple[v]:
                    ctr += 3
                    new_inputs.append(value[v]*w)
                else:
                    ctr += 1
                    new_inputs.append(v)
            else:
                ctr += 1
                new_inputs.append(v)
        elif type(v) == int:
            if type(w) == int:
                ctr += 2
                new_inputs.append(v+w)
            else:
                ctr += 1
                new_inputs.append(v)
        else:
            ctr += 1
            new_inputs.append(v)
    if ctr == len(inputs)-1:
        new_inputs.append(inputs[ctr])
    if len(inputs) == len(new_inputs):
        inputs = [0]
    else:
        inputs = new_inputs

print(inputs[0])

 

ํ‹€๋ฆฐ ์›์ธ

 

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ (IndexError). ๋งค๋ฒˆ ํ˜„์žฌ node์™€ ๋‹ค์Œ node๋งŒ ๋น„๊ตํ•˜๋‹ค๊ฐ€ (X) ํ˜•ํƒœ์ผ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋‹ค๋‹ค์Œ node๊นŒ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ด ๋•Œ (X์—์„œ ๊ฐ’์ด ๋๋‚˜๋Š” ๊ฒฝ์šฐ์— index error๊ฐ€ ๋ฐœ์ƒ.

์˜ˆ์™ธ ์ผ€์ด์Šค: https://www.acmicpc.net/board/view/68189

 

 

๐Ÿ’ก Solution

์ฝ”๋“œ
inputs = list(input())

couple = {'(': ')', '[': ']'}
value = {'(': 2, '[': 3}

while len(inputs) > 1 or type(inputs[0]) != int:
    ctr = 0
    new_inputs = []
    while ctr < len(inputs)-1:
        v = inputs[ctr]
        w = inputs[ctr+1]
        if v == '(' or v == '[':
            if w == couple[v]: #() or []: change into number
                ctr += 2
                new_inputs.append(value[v])
            elif type(w) == int: #(w) or {w}: change into 2/3*w
                try:
                    x = inputs[ctr+2]
                except:
                    inputs = [0]
                    break
                if x == couple[v]:
                    ctr += 3
                    new_inputs.append(value[v]*w)
                else:
                    ctr += 1
                    new_inputs.append(v)
            else:
                ctr += 1
                new_inputs.append(v)
        elif type(v) == int:
            if type(w) == int:
                ctr += 2
                new_inputs.append(v+w)
            else:
                ctr += 1
                new_inputs.append(v)
        else:
            ctr += 1
            new_inputs.append(v)
    if ctr == len(inputs)-1:
        new_inputs.append(inputs[ctr])
    if len(inputs) == len(new_inputs):
        inputs = [0]
    else:
        inputs = new_inputs

print(inputs[0])

 

์ฝ”๋“œ ์„ค๋ช…
  • ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ” ์คŒ.
  • () : ์ˆซ์ž๋กœ ๋ณ€๊ฒฝ
  • (X): X*2๋กœ ๋ณ€๊ฒฝ. (์ด ๊ฒฝ์šฐ์— ๋งŒ์•ฝ IndexError๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ๋งˆ์ง€๋ง‰ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์ „์— ๋ฌธ์ž์—ด์ด ๋๋‚œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฌธ์ž์—ด์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ. ๋ฐ”๋กœ 0 ๋ฐ˜ํ™˜.)
  • XY: X+Y๋กœ ๋ณ€๊ฒฝ
  • [์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ
  • ๋งŒ์•ฝ ๋๊นŒ์ง€ ๋‹ค ๋Œ์•˜๋Š”๋ฐ๋„ ๊ธธ์ด๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ทœ์น™์— ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ. ์ด ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ”๋กœ 0 ๋ฐ˜ํ™˜.
  • ๋ฌธ์ž์—ด์ด ์ •์ˆ˜ ํ•˜๋‚˜๋งŒ ๋‚จ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต.
๋ฐ˜์‘ํ˜•