728x90
https://www.acmicpc.net/problem/4619
4619번: 루트
입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, B와 N이 주어진다. (1 ≤ B ≤ 1,000,000, 1 ≤ N ≤ 9) 입력의 마지막 줄에는 0이 2개 주어진다....
www.acmicpc.net
문제
양의 정수 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 |
댓글