문제출처
https://www.acmicpc.net/problem/28086
문제분석
수식을 문자열을 입력 받아서 8진수 연산을 하는 문제였다.
피연산자들의 부호를 주의해서 구현하면 된다.
문제접근
문제분석과 동일.
코드구현
# 2024.05.11(토)
# 미소녀 컴퓨터 파루빗토 짱
import sys
input = sys.stdin.readline
def sol():
equation = exp()
operate(equation)
# 표현식 받기
def exp()-> tuple:
expression = input().strip() # 표현식 자체를 입력받기
op, A, B = '', '', ''
for i in range(1, len(expression)):
c = expression[i:i+1]
if c == '+' or c == '-' or c =='*' or c == '/':
op = c
A = expression[:i]
B = expression[i+1:]
break
return (A, op, B)
# 8진수 사칙연산
def operate(expression:tuple):
A, op, B = expression
A = int(A, 8)
B = int(B, 8)
C = 0
if op == '+':
C = A + B
elif op == '-':
C = A - B
elif op == '*':
C = A * B
elif op == '/':
if B == 0:
print("invalid")
return
C = A // B
if C < 0:
print('-' + oct(C)[3:])
else:
print(oct(C)[2:])
sol()
배운점
- 일단 구현부터 하고 개선하기
- 10진수 변환과정을 거치지 않는 채 8진수 연산을 할 수 있는 방법이 있지 않을까 고민하다가 시간을 많이 보내게 되었다. 다른 회원님들에게 물어보니 10진수 연산으로 변환하는 코드를 짰다고 했다. 쉬운 길이 있으면 굳이 어려운 길을 택할 필요는 없는 것 같다.