알고리즘 문제풀이/Beakjoon

백준 4619. 루트 (JAVA)

joah.k 2023. 3. 19. 19:16
728x90

https://www.acmicpc.net/problem/4619

 

4619번: 루트

입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, B와 N이 주어진다. (1 ≤ B ≤ 1,000,000, 1 ≤ N ≤ 9) 입력의 마지막 줄에는 0이 2개 주어진다.

www.acmicpc.net

 

루트 

한국어   
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 128 MB 1664 979 857 59.431%

문제

양의 정수 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

 

 


풀이 :  기준 숫자 b를 기준으로 이전 수, 다음 수를 left, right 에 저장하여 비교한 후 b와 더 가까운 수를 출력  

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

public class Main {
    // 백준 4619. 루트
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while (true){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int b = Integer.parseInt(st.nextToken());
            int n = Integer.parseInt(st.nextToken());
            if(b==0 && n==0) break;
            int left = 0;
            int right = 0;

            for(int i=1; i<=b; i++){
                if(b <= Math.pow(i,n)){
                    right = i;
                    left = right-1;
                    System.out.println((b-Math.pow(left,n)<Math.pow(right,n)-b)? left:right);
                    break;
                }
            }
        }
    }
}
728x90