[BOJ 1287] 할 수 있다
2021. 10. 11. 17:08ㆍBaekjoon
728x90
https://www.acmicpc.net/problem/1287
- 문제 요약
식이 문자열 형식으로 주어지면 그 식을 계산하여 결괏값을 10진수 형식으로 출력하시오.
단, 식을 구성하는 문자는 0~9까지의 숫자, +, -, /, *, (, )이고 +, -, /, *는 이항 연산자이다.
식이 올바르지 않아 계산 할 수 없다면 "ROCK"를 출력한다.
- 알고리즘 정리
이 문제는 무조건 파이썬으로 푸는 게 편할 것 같아서 이번만큼은 C++을 버리고 파이썬으로 풀어보려 합니다.
우선 문자열 하나를 입력받고 문자열 길이만큼 for문을 돌리면서 식이 바른지 아닌지를 검증합니다.
그리고 올바른 식이라면 eval() 함수를 이용해서 식을 계산하면 됩니다.
+) eval() 함수는 식을 문자열로 받아서 계산을 해주는 함수입니다.
- 코드 작성
s=input()
new=''
check=''
arr=['0','1','2','3','4','5','6','7','8','9','(',')']
if s.count('()')!=0:
new+='x'
for i in s:
if i=='/':
new+='//'
else:
new+=i
if i not in arr:
check+='&'
else:
check+=i
try:
eval(check)
print(eval(new))
except:
print("ROCK")
문자열 s를 입력받고, s 안에 ()가 들어있는지 확인해줍니다. (괄호 쌍이 들어있으면 식이 성립이 안됩니다.)
만약 들어있다면 나중에 eval(new) 부분에서 에러가 나고 except 부분으로 넘어갈 수 있도록 x를 집어넣어 줍니다.
그리고 나선 for문을 돌리면서 식을 만들어주고 eval(new)를 출력해줍니다.
이번 문제는 eval() 함수 덕분에 쉽게 풀 수 있었습니다.
만약 eval() 함수를 몰랐더라면 저는 큐브 문제를 풀 때처럼 C++로 막노동을 하고 있었겠죠...ㅋㅋㅋㅋ
언어 학습의 중요성을 다시 한번 상기시키는 문제였습니다.
728x90
'Baekjoon' 카테고리의 다른 글
[BOJ 3830] 교수님은 기다리지 않는다 (0) | 2022.08.20 |
---|---|
[BOJ 1655] 가운데를 말해요 (0) | 2022.05.04 |
[BOJ 15590] Rental Service (0) | 2022.05.03 |
[BOJ 5373] 큐빙 (0) | 2021.08.12 |
[BOJ 17428] K번째 괄호 문자열 (0) | 2021.08.07 |