-
[백준/BOJ] 4619번 : 루트 (JAVA / 자바)백준 2022. 2. 4. 18:00
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/4619
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
A의 N 제곱이 B에 근접한 수를 구하려면 A에 1부터 넣어서 N제곱 했을때 B보다 작거나 같거나 큰 수 중 2개를 구하면 된다. 그리고 두 값중 B와 제일 근접한 수를 찾으려면 B를 빼서 더 작은 수를 구하면 된다. 코드로 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { 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()); //B와 근접한 A값을 저장할 변수 int num1 = 0; int num2 = 0; //0 0 입력되면 무한루프 종료 if(B == 0 && N == 0) { break; } int A = 0; //반복 횟수를 정하기 애매하기에 무한루프 사용 while(true) { //A의 N제곱이 B보다 작거나 같거나 클때에 맞춰 num1 num2에 저장. 클경우엔 저장하고 반복문 종료 //간단히 설명하면 B보다 작을때는 계속 저장하다보면 작은 수중 제일 작은 수가 저장될 것이다. //큰 수는 한번이라도 나오면 저장하고 종료되게 해둔 것이다. if(Math.pow(A, N) <= B) { num1 = A; }else if(Math.pow(A, N) > B){ num2 = A; break; } //반복문이 계속되는 동안 A에 1씩 더해간다. A++; } //삼항연산자로 A의 N제곱과 B의 차이가 누가 더 큰가를 본다. //하지만 두 갑의 차이를 보는 것이기에 음수가 나오면 안되니 절댓값으로 구해준다. int result = (Math.abs(Math.pow(num1, N) - B) <= Math.abs(Math.pow(num2, N) - B)) ? num1 : num2; System.out.println(result); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 4766번 : 일반 화학 실험 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4690번 : 완전 세제곱 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4504번 : 배수 찾기 (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4493번 : 가위 바위 보? (JAVA / 자바) (0) 2022.02.04 [백준/BOJ] 4388번 : 받아올림 (JAVA / 자바) (0) 2022.02.04