컴퓨터 공학 분야 별 지식/백준

BOJ 백준 1935번 문제 <후위 표기식> python, 문제 해석 및 풀이

N돌핀 2023. 1. 19. 22:27

 

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net


문제에 대한 간단한 이해

- 후위 표기식 계산 문제입니다.

입출력에 대한 이해

- 후위 표기식이 들어오면 연산하여 값을 출력해줍니다.

문제에 대한 세부 이해

1. 주어진 것(입력값)

후위 표기식

 

2. 구하고자 하는 것(출력값)

연산 결과값

 

3. 규칙

- 후위 표기식은 피연산자들 + 연산자들 뭉텅이로 구성됩니다.

 

- 한 뭉텅이에서 가장 먼저 연산되어야 할 연산자가 가장 앞에 옵니다.

 

- 후위 표기식에 대한 예시를 보았을 때 계산이 피연산자가 나온 후 가장 마지막에 나온 피연산자부터 연산자를 통해 계산이 됩니다.

 

구현

- 가장 뒤에 나온 피연산자부터 계산을 해야 하므로 자료구조 중에서 "스택"개념이 필요함을 알 수 있습니다. (스택을 모르시는 분은 검색바랍니다.)

 

- 피연산자를 넣어두는 스택을 이용해서 계산을 하고 값을 피연산자처럼 스택에 다시 넣습니다.

 

- 피연산자로 나오는 문자들과 숫자들을 이어주기 위해 숫자들을 모두 받고 else부분에서 ord를 이용해서 아스키코드 값으로 바꾸어 문자와 1대1매칭을 시켜줍니다.

number_stack = []

N = int(input())
equation_str = input()
tmp_list = []
for i in range(N):
    tmp_list.append(int(input()))

for c in equation_str:
    if c == '*':
        back = number_stack.pop()
        front = number_stack.pop()
        number_stack.append(front * back)
    elif c == "+":
        back = number_stack.pop()
        front = number_stack.pop()
        number_stack.append(front + back)
    elif c == "/":
        back = number_stack.pop()
        front = number_stack.pop()
        number_stack.append(front / back)
    elif c == "-":
        back = number_stack.pop()
        front = number_stack.pop()
        number_stack.append(front - back)
    else:
        number_stack.append(float(tmp_list[ord(c)-65]))


print('%0.2f' % number_stack[0])

- 맨 마지막 프린트 구문은 간단하게 round를 사용했었는데 자동으로 끝자리 0은 버리는 것인지 제대로 나오지 않아서 0.2f를 이용하여 처리합니다.

 


어제 클라이밍 하고 오늘은 쉬려 했는데 집에 있는다니까 강인한 친구에게 끌려나와서 덕분에 카페에서 공부중

집에만 있으면 또 하기 귀찮아서 누워서 유튜브 봤을 것 같긴 하다.

이게 선한 영향력인가 싶기도 하고...