16133번 - 공학용 계산기 (Calculator)
일단, 나누기 연산은 x/y, 제곱연산은 powl(x, y), 루트 연산은 (ll) sqrtl(x)을 사용해야합니다.
소수점이 나오면 '0에 가까운 값'으로 사용한다는 조건 때문에 위의 연산들이 맞게 됩니다.
힘들게 반올림하여 사용하게 하면 틀립니다.
입력 받을 때 stoi가 아니라 stoll을 사용해야 합니다.
^은 연산방향이 오른쪽에서 왼쪽으로라는 것을 잊지 맙시다.
괄호 앞에 #가 있을 수 있습니다!
아래는 예제가 모두 맞았지만 왜 틀리는지 모르겠을 때 확인해야 할 테스트케이스입니다.
위에서 제시한 함수들은 LINUX환경에서만 정상적으로 작동하는 듯 합니다.
57번째 줄의 경우에는 위의 답이 정답이 맞지만 윈도우에서는 다른 결과가 나올 수 있는 듯합니다.
제가 틀린 반례 하나 추가합니다.
input:
#(25)=
output:
5
제가 틀린 반례 추가합니다.
C++로 풀지 않아서 나눗셈을 직접 구현하다가 부동소숫점을 써버렸습니다.
반례 #9223372030926249000=
3037000498
에서 실제로 해보면
3037000499가 나오는데 (윈도우입니다.)
이때는 어떻게 해야되죠 큰수 말고는 다 되는거같은데
아 해결했습니다 라이브러리가 정확하지 않군요
사실상 제곱과 제곱근은 그냥 직접 구현하셔도 상관 없구요
제가 풀면서 썼던 테스트 케이스 공유 드립니다.
스택없이 나이브하게 푸느라 굉장히 간단한 케이스에서 오류가 났습니다.
댓글을 작성하려면 로그인해야 합니다.
dhkang01 3년 전
일단, 나누기 연산은 x/y, 제곱연산은 powl(x, y), 루트 연산은 (ll) sqrtl(x)을 사용해야합니다.
소수점이 나오면 '0에 가까운 값'으로 사용한다는 조건 때문에 위의 연산들이 맞게 됩니다.
힘들게 반올림하여 사용하게 하면 틀립니다.
입력 받을 때 stoi가 아니라 stoll을 사용해야 합니다.
^은 연산방향이 오른쪽에서 왼쪽으로라는 것을 잊지 맙시다.
괄호 앞에 #가 있을 수 있습니다!
아래는 예제가 모두 맞았지만 왜 틀리는지 모르겠을 때 확인해야 할 테스트케이스입니다.