본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 4619 : 루트

반응형

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

 

4619번: 루트

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

www.acmicpc.net

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

while loop를 수행하며 b, n을 선언 후 입력해줍니다. 둘 다 0이면 loop를 탈출합니다.

📔 풀이과정

 a ^ n <= 200만 이하인 동안 for loop를 수행합니다. 최소의 차이값을 저장할 minDiff, 그 때의 a값 minVal을 지역변수로 선언해줍니다. 1. a^n값과 b의 절댓값 차이를 변수 diff 선언 후 저장해줍니다. 2. 구한 diff가 minDiff보다 작다면 그 때의 차이를 minDiff에, a값을 minVal에 저장해줍니다.

📔 정답출력

minVal을 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int main(){
    while(1){
        int b, n;
        cin >> b >> n;
        if(!b && !n) break;
        int minDiff = 0x3f3f3f3f;
        int minVal = 0x3f3f3f3f;
        for(int a = 1; pow(a,n) <= 2000000; a++) {
            int diff = abs(pow(a,n) - b);
            if(diff < minDiff) minDiff = diff, minVal = a;
        }
        cout << minVal << '\n';
    }
}