나를 기록하다
article thumbnail
반응형

백준(baekjoon) 1312 소수

1. 파이썬(Python)

1) 첫번째 풀이(오답)

import sys

input = sys.stdin.readline
a, b, n = map(int, input().split())
x = a / b
x = x * pow(10, n)
y = int(x / 10) * 10
print(int(x-y))

런타임 에러(OverflowError)가 발생했다. 찾아보니 파이썬은 소수점 15자리까지만 표시하기에 n이 15가 넘어가면 오류가 발생한다.

따라서 오류가 발생한다.

 

2) 두번째 풀이(정답)

a, b, n = map(int, input().split())

for i in range(n):
    a = (a % b) * 10
    result = a // b

print(result)

처음부터 다시 생각하여 실제로 나눗셈을 할 때처럼 a를 b로 나눈 나머지를 구하고 그 값에 10을 곱하여 a에 다시 대입한다.

그리고 result에 a를 b로 나눈 몫을 대입한다.

 

예를 들어, a = 32, b = 7, n = 4라고 하면

i = 0 ) a % b = 4이므로 a = 40, result = 5

i = 1 ) a % b = 5이므로 a = 50, result = 7 

i = 2 ) a % b = 1이므로 a = 10, result = 1

i = 3) a % b = 3이므로 a = 30, result = 4

결과적으로 print(result)를 출력하면 4가 나온다.

 

 

2. 자바(Java)

1) 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        int result = 0;
        for(int i = 1; i <= n; i++) {
            a = (a % b) * 10;
            result = (a / b);
        }
        System.out.println(result);
    }
}

Scanner는 처리속도가 느리기에 BufferedReader와 StringBuilder을 사용하여 입력을 받고, StringTokenizer을 이용하여 입력받은 문자열을 " "(공백)을 간격으로 a, b, n으로 나누어 입력받으며, Integer.parseInt를 사용하여 정수로 변환한다.

그 후, 파이썬에서와 같이 for 반복문을 이용하여 result를 구한 후 System.out.println(result);를 이용하여 출력한다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...