728x90
https://www.acmicpc.net/problem/4619
문제
양의 정수 B와 N이 주어졌을 때, B에 가장 가까운 AN의 정수 A를 찾는 프로그램을 작성하시오. AN은 B보다 작거나, 크거나, 같다.
입력
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, B와 N이 주어진다. (1 ≤ B ≤ 1,000,000, 1 ≤ N ≤ 9) 입력의 마지막 줄에는 0이 2개 주어진다.
출력
각 테스트 케이스에 해당하는 A를 출력한다.
예제 입력1
4 3
5 3
27 3
750 5
1000 5
2000 5
3000 5
1000000 5
0 0
예제 출력1
1
2
3
4
4
4
5
16
해설
an의 값이 b보다 작을 때까지 while문을 통해 반복을 한다.
여기서 a의 값을 1부터 시작하여 루프를 한번 돌 때마다 1씩 증가시켜 주면 반복문이 끝났을 때 a의 값은 an을 했을 때 b보다 크다. 따라서 |b - an|이 |b - (a-1)n|보다 작으면 a를 출력하고 반대라면 a-1를 출력하면 된다.
소스 코드
import java.lang.Math.abs
import java.lang.Math.pow
import java.lang.StringBuilder
import java.util.*
fun main() {
val sb = StringBuilder()
while(true) {
val st = StringTokenizer(readLine())
val b = st.nextToken().toInt()
val n = st.nextToken().toInt()
if(b == 0 && n == 0) break
var a = 1
var cal = 0
while (true) {
cal = pow(a.toDouble(), n.toDouble()).toInt()
if (cal >= b) break
a++
}
val cal2 = pow((a - 1).toDouble(), n.toDouble()).toInt()
if (abs(b -cal) < abs(b - cal2)) sb.append("${a}\n")
else sb.append("${a-1}\n")
}
println(sb.toString())
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 11034번: 캥거루 세마리2 (0) | 2021.11.23 |
---|---|
[백준/BOJ] 11718번: 그대로 출력하기 (0) | 2021.11.23 |
[백준/BOJ] 2446번: 별 찍기 - 9 (0) | 2021.11.20 |
[백준/BOJ] 2445번: 별 찍기 - 8 (0) | 2021.11.20 |
[백준/BOJ] 2444번: 별 찍기 - 7 (0) | 2021.11.19 |
댓글