We will find a way, we always have.

-interstellar

Problem Solving/λ°±μ€€

[λ°±μ€€] 1935번: ν›„μœ„ ν‘œκΈ°μ‹2 - 파이썬

Redddy 2022. 5. 8. 00:54

πŸ“• 문제 풀이

ν›„μœ„ ν‘œκΈ°μ‹μœΌλ‘œ λ¬Έμžκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ 연산을 ν•˜μ—¬ 값을 좜λ ₯ν•œλ‹€.

 

ν›„μœ„ν‘œκΈ°μ‹μ΄λž€?

 

ν›„μœ„ν‘œκΈ°μ‹μ€ 컴퓨터가 μ—°μ‚°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 방법이닀. 

μš°λ¦¬κ°€ μ—°μ‚°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” (3*4+6)/2 이런 식듀은 μ€‘μœ„ν‘œκΈ°μ‹μ΄λ‹€.

ν›„μœ„ν‘œκΈ°μ‹κ³Ό μ€‘μœ„ν‘œκΈ°μ‹μ˜ μ°¨μ΄λŠ” λ°”λ‘œ μ—°μ‚°μžμ˜ μœ„μΉ˜μ΄λ‹€.

μ—°μ‚°μžλž€ + , -, *, / 와 같은 것듀이고 ν”Όμ—°μ‚°μžλŠ” μˆ«μžλ‚˜ 문자둜 μ΄λ£¨μ–΄μ Έμžˆλ‹€.

 

 

 

ν›„μœ„ν‘œκΈ°μ‹μ„ μ€‘μœ„ν‘œκΈ°μ‹μœΌλ‘œ λ°”κΎΈλŠ” κ³Όμ •μ—λŠ” μŠ€νƒ 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•œλ‹€. 

λ°˜λŒ€λ‘œλ„ λ§ˆμ°¬κ°€μ§€!

 

μ€‘μœ„ν‘œκΈ°μ‹ 5*(3*4+6)/2을 ν›„μœ„ν‘œκΈ°μ‹μœΌλ‘œ λ°”κΏ”λ³΄μž!!

 

μ€‘μœ„ν‘œκΈ°μ‹μ„ ν›„μœ„ν‘œκΈ°μ‹μœΌλ‘œ λ³€ν™˜κ³Όμ •

 

1. μ€‘μœ„ν‘œκΈ°μ‹ μ—°μ‚° ν•˜λ‚˜ν•˜λ‚˜λ§ˆλ‹€ κ΄„ν˜Έλ₯Ό μ”Œμ–΄μ€€λ‹€. 5*(3*4+6)/2  =>  ((5*((3*4)+6))/2)

2. μ™Όμͺ½κ΄„ν˜Έκ°€ λ“€μ–΄μ˜€λ©΄ λ¬΄μ‹œ

3. ν”Όμ—°μ‚°μžκ°€ λ“€μ–΄μ˜€λ©΄ 좜λ ₯

4. μ—°μ‚°μžκ°€ λ“€μ–΄μ˜€λ©΄ μŠ€νƒμ— μ €μž₯

5. 였λ₯Έμͺ½κ΄„ν˜Έκ°€ λ“€μ–΄μ˜€λ©΄ μŠ€νƒμ—μ„œ ν•˜λ‚˜ 꺼냄

6. 2~5λ²ˆμ„ 계속 μˆ˜ν–‰ν•΄λ‚˜κ°„λ‹€.

 

 

ν›„μœ„ν‘œκΈ°μ‹μ„ μ€‘μœ„ν‘œκΈ°μ‹μœΌλ‘œ λ³€ν™˜κ³Όμ •

 

1. ν”Όμ—°μ‚°μžκ°€ λ“€μ–΄μ˜€λ©΄ μŠ€νƒμ— μ €μž₯

2. μ—°μ‚°μžκ°€ λ“€μ–΄μ˜€λ©΄ μŠ€νƒμ— μžˆλŠ”κ±° λ‘κ°œ κΊΌλ‚Έλ‹€μŒ μ—°μ‚°μ²˜λ¦¬ ν›„ λ‹€μ‹œ μŠ€νƒμ— μ €μž₯

 

 

μ€‘μœ„ν‘œκΈ°μ‹ : 5*(3*4+6)/2

ν›„μœ„ν‘œκΈ°μ‹ : 534*6+*2/

 

πŸ’» μ½”λ“œ

n = int(input()) # ν”Όμ—°μ‚°μžμ˜ 갯수
sick = list(input()) # ν›„μœ„ν‘œκΈ°μ‹μœΌλ‘œ μž…λ ₯λ°›μŒ
hui = dict() # ν”Όμ—°μ‚°μžμ— 값을 넣어쀄 λ”•νŠΈ
num = [] # λ³€ν™˜κ³Όμ •μ€‘ ν”Όμ—°μ‚°μž 넣어쀄 μŠ€νƒ

# ν”Όμ—°μ‚°μž(μ•ŒνŒŒλ²³)에 κ°’(숫자)을 μ €μž₯ν•˜λŠ” 파트
for i in sick:
	# ν”Όμ—°μ‚°μžκ°€ μž…λ ₯됐닀면
    if 65 <= ord(i) <= 90:
    	# 이전에 μž…λ ₯λ˜μ§€ μ•Šμ•˜λ˜ 문자라면 즉 처음 λ“±μž₯ν•œ 문자라면
        if i not in hui:
        	# 값을 μ €μž₯ν•΄μ€€λ‹€.
            hui[i] = input()

# μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ ν›„μœ„ν‘œκΈ°μ‹μ„ κ³„μ‚°ν•˜λŠ” 파트
for j in sick:
	# ν”Όμ—°μ‚°μžλΌλ©΄
    if 65 <= ord(j) <= 90:
        # μ•„κΉŒ μ €μž₯ν•΄λ‘” 값을 μŠ€νƒμ— μ €μž₯
        num.append(hui[j])
    else:
    	# μ—°μ‚°μžκ°€ μž…λ ₯λμ„μ‹œ
        a = str(num.pop())
        b = str(num.pop())
        # μŠ€νƒμ—μ„œ λ‘κ°œ κΊΌλ‚΄κ³  연산을 ν•œλ‹€μŒ λ‹€μ‹œ μŠ€νƒμ— μ €μž₯
        num.append(eval(b+j+a))
        
# μ†Œμˆ˜ 2자리 반올림 ν›„ 좜λ ₯
print(f"{num[0]:.2f}")

 

πŸ”— 문제링크 : ν›„μœ„ ν‘œκΈ°μ‹2

 

1935번: ν›„μœ„ ν‘œκΈ°μ‹2

첫째 쀄에 ν”Όμ—°μ‚°μžμ˜ 개수(1 ≤ N ≤ 26) κ°€ 주어진닀. 그리고 λ‘˜μ§Έ μ€„μ—λŠ” ν›„μœ„ ν‘œκΈ°μ‹μ΄ 주어진닀. (μ—¬κΈ°μ„œ ν”Όμ—°μ‚°μžλŠ” A~Z의 μ˜λŒ€λ¬Έμžμ΄λ©°, AλΆ€ν„° μˆœμ„œλŒ€λ‘œ N개의 μ˜λŒ€λ¬Έμžλ§Œμ΄ μ‚¬μš©λ˜λ©°, 길이

www.acmicpc.net