jk6722   2년 전

도피하고 싶은 문제네요

혹시 스트링 형태로 정답을 출력하면 오답 처리 되나요??

만약 이것 때문에 틀린 게 아니라면 어디서 틀렸는지 궁금합니다..ㅠ

확률은 더블로 구해서 스트링으로 바꿔서 소수점 18번째 자리까지만 잘랐고

예제는 다 잘나오는데 어디서 틀린 지 모르겠습니다.

bnb2011   2년 전

이 문제는 실수를 사용하지 않고 푸는 방법이 존재합니다.

실수로 이 문제를 풀 수 있는지는 확인을 해보지 않았습니다만, 문제에서 요구하는 정밀도가 소수점 18째자리로 매우 높고, 실수 오차가 허용되지 않는 문제이기 때문에 임의로 실수 정밀도를 끌어올리지 않는 이상은 풀기 어려울 것으로 생각이 됩니다.

chansol   2년 전

java의 double은 정밀도가 15 ~ 16자리라 더 높은 정밀도를 가지는 실수 자료형을 사용하거나 다른 방법을 사용해서 풀어야 합니다.

jk6722   2년 전

실수를 사용하지 않는다면 문자열로 계산하는 방법을 말씀하시는 건가요..??

chansol   2년 전

10^9를 곱하는 방법으로 실수가 아닌 정수로 계산할 수 있습니다. 답을 출력할 때만 소수점을 맞춰서 해주면 됩니다.

jk6722   2년 전

저도 그 방법으로 9일차에 확률이 100퍼센트라고 해도 100^9 일테니 int나 long long으로 커버가 가능하다고 생각해서 정수형으로 계산했습니다

마지막에 출력할 때는 정수를 스트링으로 바꿔서 소수점으로 변환 후 출력해줬는데 틀렸습니다 ㅠ

출력 방식에 문제가 있는 것 같은데 좋은 방법 있을까요???

답변 감사합니다 ㅎㅎ 

chansol   2년 전

제가 위에서 잘못 썼네요

확률을 N%라고 했을 때, 0.N으로 저장하는게 아니라, N으로 저장해서 풀면 됩니다.

그러니까, 0.00 ~ 1.00으로 저장하는 대신에, 0 ~ 100으로 저장해서 푸는겁니다.

모든 길이 100%의 확률이더라도 9번 밖에 이동하지 않기 때문에, 100^9 = 10^18이므로 long long만 사용해서 풀 수 있습니다

jk6722   2년 전

넵 제가 다시 올린 코드 보시면 dp배열을 long long 으로 만들어서

예제1을 예시로 9일차에 8번에 있을 확률에 long long 242078400000000000 값이 저장되어 있습니다.

이걸 문자열로 변환한 다음 소수점을 만들어 주고 출력했는데 틀렸다고 하네요..

chansol   2년 전

아래 코드에서 double을 ll(int형도 괜찮음)로 바꿔야 합니다.

int면 long long으로 형변환을 하는데 long long하고 double이 있으면 long long이 double로 형 변환되면서 계산이 제대로 안됩니다.

이거만 수정해주시면 맞을 거 같습니다.

jk6722   2년 전

와 드디어 AC 받았습니다 chansol님 복받으세요

감사합니다👍👍

jeong20909   2년 전

감사합니다 jk6722님 chansol님 덕분에 AC받았습니다!

댓글을 작성하려면 로그인해야 합니다.