๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Problem_Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1662 ์••์ถ• (Python/ํŒŒ์ด์ฌ)

by ํฌ์ŠคํŠธ์‰์ดํฌ 2022. 10. 5.

<๋ฌธ์ œ ๋งํฌ>

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

 

1662๋ฒˆ: ์••์ถ•

์••์ถ•๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด S๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ๋ฌธ์ž์—ด์ค‘ ์–ด๋–ค ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์€ K(Q)์™€ ๊ฐ™์ด ์••์ถ• ํ•  ์ˆ˜ ์žˆ๋‹ค. K๋Š” ํ•œ์ž๋ฆฌ ์ •์ˆ˜์ด๊ณ , Q๋Š” 0์ž๋ฆฌ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์ด๋‹ค. ์ด Q๋ผ๋Š” ๋ฌธ์ž์—ด์ด K๋ฒˆ ๋ฐ˜๋ณต๋œ๋‹ค๋Š” ๋œป์ด

www.acmicpc.net

 

<ํ’€์ด ์ „๋žต>

1. ์Šคํƒ์„ ํ™œ์šฉํ•œ ๋ฌธ์ž์—ด ๋ฌธ์ œ์ด๋‹ค.

2. ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ฆฌ๊ธฐ ์‰ฌ์šด ํ’€์ด๋Š” ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด์„ ์••์ถ•ํ•ด์ œํ•ด์„œ ๊ฒฐ๊ณผ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฑด๋ฐ, ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 2,147,473,647์ธ์ง€๋ผ ๋‹น์—ฐํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

3. ํ•ต์‹ฌ์€ ๋ฌธ์ž์—ด ์ „์ฒด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ '๊ธธ์ด'๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ด„ํ˜ธ ์•ž์— ์œ„์น˜ํ•œ ๋ฐ˜๋ณต ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž๋งŒ ์ˆซ์ž ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ , ๋‚˜๋จธ์ง€ ์••์ถ• ํ•ด์ œ ๋Œ€์ƒ์ธ ๋ฌธ์ž๋“ค์€ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 1๋กœ ์ €์žฅํ•ด์„œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋งŒ ๊ณ„์‚ฐํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

4. ํ’€๊ณ ๋‚˜์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด ๋ฒ”์œ„๋กœ ๋ณด์•„ ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด์„ ์••์ถ• ํ•ด์ œํ•ด์„œ ํ’€์ดํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚  ์ˆ˜๋ฐ–์— ์—†๋Š” ๋ฌธ์ œ์˜€๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ํ•ญ์ƒ ์กฐ๊ฑด์„ ๊ผผ๊ผผํžˆ ์ฝ๊ณ  ์ถฉ๋ถ„ํžˆ ์ƒ๊ฐ์„ ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ฒŒ ํ•ด์ฃผ๋Š” ์ข‹์€ ๋ฌธ์ œ์˜€๋‹ค

 

<์ •๋‹ต ์ฝ”๋“œ>

# 220917 1662 ์••์ถ•

# ์ •๋‹ต์ฝ”๋“œ

# string: ์••์ถ•๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด
string = input()

# stack: ์Šคํƒ
stack = []

for i in range(len(string)):

    # ์—ฌ๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ ์Šคํƒ์— ๋„ฃ์–ด์ค€๋‹ค.
    if string[i] == '(':
        stack.append(string[i])
    
    # ๋‹ซ๋Š” ๊ด„ํ˜ธ์ผ ๊ฒฝ์šฐ
    elif string[i] == ')':
        # ์••์ถ•์„ ํ’€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
        length = 0

        while True:
            # ์••์ถ•์„ ํ’€ ๋ฌธ์ž๋ฅผ ์Šคํƒ์—์„œ ๊บผ๋‚ด์ค€๋‹ค.
            char = stack.pop()
            # ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์Šคํƒ์—์„œ ๊บผ๋‚ด์ฃผ๊ธฐ            
            if char == '(':
                break
    
            # ์••์ถ•์„ ํ’€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋”ํ•ด์ค€๋‹ค.
            length += char
        
        # ์Šคํƒ์— ์••์ถ•์„ ํ‘ผ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋‹ค์‹œ ๋„ฃ์–ด์ค€๋‹ค.
        stack.append(stack.pop() * length)

    # ์ˆซ์ž์ผ ๊ฒฝ์šฐ
    else:
        # ๊ด„ํ˜ธ ์•ž์— ์˜ค๋Š” ์ˆซ์ž์ผ ๊ฒฝ์šฐ(๋ฐ˜๋ณต ํšŸ์ˆ˜) ์ •์ˆ˜ํ˜•์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์„œ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค.
        if i < len(string) - 1 and string[i + 1] == '(':
            stack.append(int(string[i]))
        # ๊ทธ ์™ธ(์••์ถ• ํ•ด์ œ ๋Œ€์ƒ)์ผ ๊ฒฝ์šฐ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” 1์„ ์Šคํƒ์— ๋„ฃ์–ด์ค€๋‹ค.
        else: 
            stack.append(1)

# ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ์ถœ๋ ฅ
print(sum(stack))

๋Œ“๊ธ€