ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소수 1312번 (좋은 문제..)
    백준 2023. 7. 31. 11:54
    728x90

    쉬워보여서 빨리풀려했는데 안풀린다..

    문제

    피제수(분자) A와 제수(분모) B가 있다. 두 수를 나누었을 때, 소숫점 아래 N번째 자리수를 구하려고 한다. 예를 들어, A=3, B=4, N=1이라면, A÷B=0.75 이므로 출력 값은 7이 된다.

    입력

    첫 번째 줄에 A와 B(1 ≤ A, B ≤ 100,000), N(1 ≤ N ≤ 1,000,000)이 공백을 경계로 주어진다.

    출력

    A÷B를 했을 때, 소숫점 아래 N번째 수를 출력한다.

    예제 입력 1

    25 7 5
    
    

    예제 출력 1

    2
    

    오답코드

    fun main() {
        val input = readLine()
        val numbers = input?.split(" ")?.map { it.toDouble() }
    
        val num1 = numbers!![0]
        val num2 = numbers!![1]
        val num3 = numbers!![2].toInt()
    
        var output: Double = (num1 / num2)
    
        val multiplier = Math.pow(10.0, num3.toDouble()).toInt()
        output *= multiplier
    
        println(output.toInt()%10)
    
    }
    

    백만까지는 연산이 안되나보다…

    정답코드

    fun main() {
        val (A, B, N) = readLine()!!.split(" ").map { it.toInt() }
    
        var output1 = A % B
    
        for (i in 1 until N) {
            output1 *= 10
            output1 %= B
        }
        val output2 = (output1.toDouble() * 10 / B).toInt()
    
        println(output2)
    }
    

    구하려는 소수점아래 자리의 수를 1의자리로 옮기는 방식으로 했더니 해결되었다…

    구글링의 도움..

    나눗셈의 원리를 차근차근생각해보면 해결할수 있겠지만 상당히 까다로운 문제였다..

    A를 B로 나누고 나온 나머지를 B로 나눴을때 나오는 몫을 구하는 그런 방식을 반복..

    연필로 직접 나누기 연산을 헤보면 10을곱하고 나머지를 구하고 그 나머지에 10을 구하고 몫과 나머지를 구하는 방식이 보일 것이다.

    아 어렵다 모르겠다 잘…

    '백준' 카테고리의 다른 글

    나이순 정렬  (0) 2023.07.31
    2751번 수 정렬하기  (0) 2023.07.31
    빠른 입출력  (0) 2023.07.31
    EOF의 이해  (0) 2023.07.31
    A+B 한줄에 입력  (0) 2023.07.31
Designed by Tistory.