728x90
https://www.acmicpc.net/problem/4375
문제
2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
출력
1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.
해설
1로만 이루어진 수 중 가장 작은 n의 배수를 찾아야 한다.
따라서 1을 저장한 변수(temp)를 시작으로 1, 11, 111, . . . . 을 n으로 나눴을 때 가장 먼저 나눠떨어지는 값이 답이 된다.
temp = (temp * 10) + 1
하지만 저렇게 자리수를 늘려가며 나누게 되면 시간 초과가 난다.
이를 해결하기 위해 temp를 n으로 나눈 나머지에 10을 곱하고 1을 더해준다.
(실제 나눗셈을 하는 과정을 생각해보자.)
이를 반복하여 0으로 나누어 떨어질 때의 자릿수를 출력하면 된다.
소스 코드
fun main() = with(System.`in`.bufferedReader()) {
while(true){
val n = readLine() ?: break
var temp = 1L
var cnt = 1
while(true) {
if(temp % n.toLong() == 0L) {
println(cnt)
break
}
temp %= n.toLong()
temp = (temp * 10) + 1
cnt++
}
}
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 9996번: 한국이 그리울 땐 서버에 접속하지 (0) | 2022.02.18 |
---|---|
[백준/BOJ] 18310번: 안테나 (0) | 2022.02.18 |
[백준/BOJ] 3085번: 사탕 게임 (0) | 2022.02.17 |
[백준/BOJ] 9657번: 돌 게임 3 (0) | 2022.02.16 |
[백준/BOJ] 2615번: 오목 (0) | 2022.02.16 |
댓글