λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜ πŸ‘©πŸ»‍πŸ’»/λ°±μ€€

[BAEKJOON] 1935 | ν›„μœ„ ν‘œκΈ°μ‹ 2

by flowing1ife 2024. 11. 22.

πŸ”Ž 1935 | ν›„μœ„ ν‘œκΈ°μ‹ 2

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


πŸ’‘ Solution

✍🏻
Logic
1. ν›„μœ„ν‘œκΈ°μ‹μ„ ν† λŒ€λ‘œ 연산을 μˆ˜ν–‰ν•˜λŠ” λ¬Έμ œμ΄λ‹€.
2. λ¨Όμ € μ•ŒνŒŒλ²³κ³Ό λ“€μ–΄μ˜€λŠ” 숫자λ₯Ό λ§€μΉ­ μ‹œν‚¨λ‹€.
3. 이후, ν›„μœ„ ν‘œκΈ°μ‹λŒ€λ‘œ 연산을 μˆ˜ν–‰ν•œλ‹€.
4. ν”Όμ—°μ‚°μžκ°€ λ“€μ–΄μ˜¬ 경우, μ•ŒνŒŒλ²³μ— ν•΄λ‹Ήν•˜λŠ” 숫자λ₯Ό μŠ€νƒμ— push ν•œλ‹€.
5. μ—°μ‚°μžκ°€ λ“€μ–΄μ˜¬ 경우, μŠ€νƒμ— μžˆλŠ” 두 μ—°μ‚°μžλ₯Ό κ°€μ§€κ³  μ™€μ„œ 연산을 μˆ˜ν–‰ν•œ ν›„, κ²°κ³Όλ₯Ό λ‹€μ‹œ μŠ€νƒμ— pushν•œλ‹€.
n = int(input().rstrip())
s = input().rstrip()
num_list = {}

for i in range(1, n+1) :
    num_list.update({chr(64 + i) : int(input().rstrip())})
    
def calculate(s) :
    stack = []
    for i in range(len(s)) :
        if ord('A') <= ord(s[i]) and ord(s[i]) <= ord('Z') :
            stack.append(num_list[s[i]])
        else :
            b = stack.pop()
            a = stack.pop()
            
            if s[i] == '+' :
                stack.append(a+b)
            elif s[i] == '-' :
                stack.append(a-b)
            elif s[i] == '*' :
                stack.append(a*b)
            elif s[i] == '/' :
                stack.append(a/b)
                
    return float(stack.pop())

result = "{:.2f}".format(calculate(s))
print(result)

β–Ά πŸ“Œ Note

βˆ™ μ„€λͺ…
μ†Œμˆ˜μ  n자리 ν˜•μ‹ λ§žμΆ”κΈ°μ—λŠ” f-string 방식과 format 방식이 μžˆλ‹€.

dictionaryλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— ꡳ이 μ•„μŠ€ν‚€μ½”λ“œλ‘œ λΉ„κ΅ν•˜μ§€ μ•Šκ³  'in'을 μ‚¬μš©ν•˜λ©΄ 더 효율적인 μ½”λ“œκ°€ 될 수 μžˆλ‹€.

β—‹ f-string
- f"{number:.2f}"
β—‹ format
- "{:.2f}".format(number)