2016년 11월 15일 화요일

BOJ 1312 소수

a, b, n이 주어지면
a/b의 소수점 n번째 자리의 수를 구하는 문제인데, n이 매우 크기도 하고 또한 소수점 n번째 자리를 어떻게 알아내지? 라는 생각부터.. 나는 정말로 실수끼리 나눗셈을 할 생각부터 하고 있었다.
하지만 slack과 질문게시판을 통해서 놀라운(나는 생각도 못한..) 방법을 알게 되었다.
바로 a/b의 소수점 n번째 자리의 수는 a*(10의 n제곱) / b의 일의 자리수와 같다는 것!!!
그렇다 실제로 예를 들어 4를 7로 나눠서 나오는 소수점 n번째 자리의 수를 구해내는 과정이나, 4의 뒤에 0을 n개 붙여서 7로 나누는 과정이나 똑같다!! 아... 난 이런 것도 생각못하고...

자... 하지만 문제가 있다. 그래도 n이 너무 크다는 것이다. 어떻게 해야할까? 또 전혀 생각도 안나고 해서 질문게시판을 봤는데...





etaehyun4님의 이런 엄청난 답변이 있었다. 좀 생각해보니 아하..!!
4의 뒤에 0을 n개 붙인 수는 너무 커서 만들 수 없다. 하지만 4의 뒤에 0을 n개 붙인 수를 7로 나눠서 그 몫의 일의 자리수를 구하는 것은 꼭 4의 뒤에 0을 n개 붙인 수가 있지 않아도 된다. 위의 힌트대로 생각해보면 그 나눗셈 과정을 구현을 하면 되는 것이다. 4부터 시작해서 0을 하나씩 붙이면서 7로 나누고 그 나머지에 또 0을 붙여서(10을 곱해서) 7로 나눠주고... 이런 식으로 n번 반복하면 답을 구할 수 있을 것이다!

와... 멋있다. 그와 동시에 정말 내 실력의 부족함을 느꼈고.. 생각을 잘 못하면 생각하는 연습도 해보고 무엇보다 많은 문제를 끊임없이 풀어보면서 실력을 키워야겠다.

댓글 없음:

댓글 쓰기