728x90
📚문제
📝풀이
# 1312번 소수(SilverV)
a,b,n = map(int,input().split())
cnt = 0
for _ in range(n):
a = (a%b)*10
cnt = a//b
print(cnt)
처음에 그냥 머릿속에 바로 떠오른 풀이
(소수점을 기준으로 split한 후 소수점 이하 몇번째자리(n번째)인지 구하기)
로 풀었는데 틀렸다 ㅎ
역시 정답률이 낮은데는 이유가 있다
이렇게 풀면
샘플 예시에서는
소수점 몇번째자리까지 딱 나누어 떨어지기 때문에 답이 잘 나온다
하지만 2진수로 표현되지 않는 소수가 들어온다면
(소수의 끝자리가 5가아니면 전부 순환소수가 된다고 생각하면된다)
실제값과 근사값의 오차가 생긴다
컴퓨터 메모리의 한계가 있어서
무한히 반복되는 값중 근사치를 가져오게 되면서 오차가 발생
예를 들어서
1/3을 한다면
출력은 이렇게 되지만
실제로 소수점 아래 30자리까지 구해본다면
이렇게나온다
파이썬에서는 실수를 "부동소수점 방식"으로 나타낸다
이 부동소수점 에 관련해서는 구글링하면
고정소수점과 비교해서 잘 설명해 놓은 글이 많기도 하고
나도 여기저기서 참고했기 때문에 따로 링크를 올리지 않았다
그래서 결론은 파이썬 상에서
그냥 소수를 구해서 단순히 소수점 아래 몇번째수를
구하는 방식으로는 풀 수 없다
그래서 예시에 나온 문제를
손으로 직접 나눗셈하며
풀다보면 규칙이 보인다
나머지에 10을 곱한것이 피제수(분자)가되고
이를 N번 반복한 뒤에 그 때의 몫을 구하면 된다
해당 풀이법을 참고한 링크의 출처
참고링크 : https://begin-dev-awos.tistory.com/m/216
728x90
'Python(알고리즘,문제풀이) > BOJ(Silver V)' 카테고리의 다른 글
백준 / 연도 진행바 / Python / 구현,문자열,파싱 (0) | 2024.01.30 |
---|---|
백준 / 1251번 / 단어 나누기 / Python / 구현,문자열,브루트포스알고리즘,정렬 (1) | 2024.01.28 |
백준 / 1010번 / 다리 놓기 / Python / 수학,DP,조합 (1) | 2024.01.27 |
백준 / 1436번 / 영화감독 숌 / Python / 브루트포스 알고리즘 (0) | 2023.12.28 |
백준 / 7568번 / 덩치 / Python / 브루트포스 알고리즘 (0) | 2023.12.11 |