오답!
#해당 수를 해당 문자에 매칭시키고 후위 연산을 진행해준다.
n = int(input())
s = list(input())
cnt = 1
stack = []
for _ in range(n):
int(input())
for i in range(len(s)):
if s[i].isalpha():
s[i] = str(cnt)
cnt += 1
for x in s:
if x.isdigit():
stack.append(float(x))
else:
if x == "+":
b = stack.pop()
a = stack.pop()
stack.append(a+b)
elif x == "-":
b = stack.pop()
a = stack.pop()
stack.append(a-b)
elif x == "*":
b = stack.pop()
a = stack.pop()
stack.append(a*b)
elif x == "/":
b = stack.pop()
a = stack.pop()
stack.append(a/b)
print("%.2f" %stack[0])
- 오답인 이유는 아마도 알파벳 부분을 숫자로 바꿔주는 부분이 틀렸을 것이다.
- 계속해서 늘어가는 것이 아닌 반복하는 AA+A 이런 경우에도 A는 1이어야 하기에 고정되는 값이 필요했다. 나는 이부분을 간과하고 풀어 틀렸다
정답
#해당 수를 해당 문자에 매칭시키고 후위 연산을 진행해준다.
n = int(input())
s = list(input())
stack = []
num = [int(input()) for _ in range(n)]
for x in s:
if 'A' <= x <= 'Z':
stack.append(num[ord(x)-ord('A')])
else:
b = stack.pop()
a = stack.pop()
if x == "+":
stack.append(a+b)
elif x == "-":
stack.append(a-b)
elif x == "*":
stack.append(a*b)
elif x == "/":
stack.append(a/b)
print("%.2f" %stack[0])
- 해당 문자를 num에 있는 숫자로 바꿔주기 위해서 아스키 코드를 사용해서 num에 인덱스로 해당 숫자에 매칭 시켜주었다.
- 또한 소수점 2번째까지 출력하라 했기에 위와 같이 진행했다. (포맷팅 사용!)
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][파이썬] - 14425. 문자열 집합(파이썬/python) (0) | 2022.07.20 |
---|---|
[백준][파이썬] - 13417. 카드 문자열(파이썬/python) (0) | 2022.07.18 |
[백준][스택] - 1918. 후위 표기식(파이썬) (0) | 2022.07.17 |
[백준][스택] - 10799. 쇠막대기(파이썬) (0) | 2022.07.17 |
[백준][스택] - 2493. 탑 (0) | 2022.07.15 |