[백준] 5355 화성 수학

J. Hwang·2024년 9월 25일
0

coding test

목록 보기
22/108

문제

겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산자이다. 따라서, 화성에서는 수학 식의 가장 앞에 수가 하나 있고, 그 다음에는 연산자가 있다.


입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 다음 줄에는 화성 수학식이 한 줄에 하나씩 주어진다. 입력으로 주어지는 수는 정수이거나 소수 첫째 자리까지 주어지며, 0 이상 100 이하이다. 연산자는 최대 3개 주어진다.


출력

각 테스트 케이스에 대해서, 화성 수학식의 결과를 계산한 다음에, 소수점 둘째 자리까지 출력한다.


내 풀이

def mars_math(equation):
    equation = equation.replace('@', '*3')
    equation = equation.replace('%', '+5')
    equation = equation.replace('#', '-7')
    
    split = equation.split(' ')
    result = split[0]
    for i in range(1, len(split)):
        result = eval(str(result)+split[i])

    return format(float(result), '.2f')

input1 = int(input())

for a in range(input1):
    print(mars_math(input()))

코멘트

문제에서 조건을 명확히 명시하지 않은 문제라는 생각이 든다. 구현 자체는 기호를 수식으로 바꿔서 계산하면 되는 식이라 매우 단순한데, 사칙연산의 순서가 원래의 수학식대로 곱셈, 나눗셈 → 뺄셈, 덧셈인지 혹은 앞에서부터 단순히 계산되는지 문제에서 명시하지 않고 있다.
그래서 처음에는 단순히 eval()을 사용했다가 예제 출력과 다른 결과가 나오는 것을 확인했다. 예제 입력 1 중 10.4 # % @ 부분은 수식으로 고치면 10.4 -7 +5 *3 이기 때문에 원래의 사칙연산 순서대로라면 [{10.4 - 7} + (5 *3)] = 18.40 이 된다. 그러나 예제 출력에서 25.20이라는 숫자가 나온다는 것은 수학의 사칙연산 순서는 무시되고 맨 처음 연산부터 순서대로 실행된다는 얘기다. ([{(10.4 -7) +5} *3] = 25.20)
그래서 순서대로 연산이 실행되도록 구현하는데 고민 시간의 대부분을 사용했다.


References

https://www.acmicpc.net/problem/5355

profile
Let it code

0개의 댓글