반응형
https://www.acmicpc.net/problem/1935
def cal(left, right, center):
if center == '*':
value=float(left) * float(right)
elif center =='-':
value = float(left) - float(right)
elif center == '/':
value = float(left) / float(right)
else:
value = float(left) + float(right)
return value
n = int(input())
expression = str(input())
stack = []
dic = {}
for i in range(ord('A'), ord('A')+n):
dic[chr(i)] = float(input())
op = ['*', '-', '+', '/']
for c in expression:
stack.append(c)
if c in op:
center = stack.pop()
right = stack.pop()
left = stack.pop()
if dic.get(left):
left = dic[left]
if dic.get(right):
right = dic[right]
value = cal(left, right, center)
stack.append(value)
print('{:.2f}'.format(round(stack[0], 2)))
딕셔너리 자료구조를 생성하여 A부터 N만큼의 알파벳까지 입력으로 들어온 값을 부여합니다.
예를 들어 예제와 같이 N=5이고 입력으로 1, 2, 3, 4, 5가 들어온다면 아래와 같이 딕셔너리에 저장됩니다.
- A : 1
- B : 2
- C : 3
- D : 4
- E : 5
그리고 op라는 변수에 계산에 사용되는 연산자를 저장합니다.
입력받은 표현식(expression)을 순회하면서 stack에 expression의 각 원소를 저장합니다.
만약 원소(c)가 연산자에 해당한다면 stack에서 값을 추출합니다.
ABC* 이 stack에 저장되었다면 아래와 같이 추출됩니다.
- center(연산자) : *
- right : C
- left : B
추출된 left, right가 딕셔너리에 저장되어 있는 값이라면 해당 값을 추출하여 left, right로 지정합니다.
그리고 cal() 함수를 호출하고 value를 계산하여 stack에 value를 저장합니다.
작성한 cal()함수에 대해서 설명하겠습니다.
cal() 함수는 left, right, center를 입력받습니다.
- left : 식의 왼쪽에 위치하는 값
- right : 식의 오른쪽에 위치하는 값
- center : 식을 계산할 연산자에 해당
입력으로 들어온 center(연산자)에 맞게 값을 계산합니다.
이때 left, right는 모두 float 으로 데이터 타입을 변경해주고 계산합니다.
반복문을 완료하였다면 stack에는 하나의 값만 남게 됩니다.
결과값을 소수점 둘째 짜리까지 출력하여 문제를 해결하였습니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 다리 놓기(1010) 파이썬(Python) (0) | 2023.04.28 |
---|---|
[코딩테스트] 백준 색종이 만들기(2630) 파이썬(Python) (0) | 2023.04.17 |
[코딩테스트] 백준 숨바꼭질3(13549) 파이썬(Python) (0) | 2023.04.13 |
[코딩테스트] 프로그래머스 연속된 부분 수열의 합 파이썬(Python) (0) | 2023.04.11 |
[코딩테스트] 백준 숨바꼭질(1697) 파이썬(Python) (0) | 2023.04.11 |