[Java] 백준 10827번 : a^b

2025. 3. 4. 20:03·Algorithm

1. 문제

 

 

실수 a의 b제곱을 정확하게 계산하는 문제이다. 지수 연산 문제로, 얼핏 보면 쉬운 문제며 코드도 짧다. 

 

 

2. 지수 연산

지수 연산이란, 어떤 수를 여러번 곱하는 것을 말한다. 즉, 문제의 제목인 a^b 는 a를 b번 곱한 값이 된다.

  • a^0 = 1
  • a^1 = a
  • a^b * a^c = a^(b+c)

등의 성질이 있다.

 

 

3. 풀이

a^b를 정확하게 계산하고 출력하기 위해서 BigDecimal이라고 하는 자바에서 매우 큰 소수나 정수를 정밀히 다룰 수 있는 클래스와 지수 연산을 하기 위해 .pow()를 사용해서 코드를 짰다.

 

4. 코드

 

오답 코드 1

 

import java.util.*;
import java.math.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigDecimal a = sc.nextBigDecimal();
        int b = sc.nextInt();
        
        BigDecimal result = a.pow(b);
        
        System.out.println(result);
        sc.close();
    }
}

 

BigDecimal을 사용하여 변수를 선언하고 .pow()를 사용해 거듭제곱을 계산했다. 하지만 이 코드를 제출하면 틀렸다고 나온다. 출력 형식이 부정확하기 때문이다. .pow()로 정확한 계산을 할 수 있지만 소수점 자리 수가 많아진다. 예를 들어 0.02342300000 처럼 불필요한 0이 출력될 수 있다. 따라서 이 불필요한 0들을 제거해야한다.

 

오답 코드 2

 

import java.util.*;
import java.math.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigDecimal a = sc.nextBigDecimal();
        int b = sc.nextInt();
        
        BigDecimal result = a.pow(b).stripTrailingZeros();
        
        System.out.println(result);
        sc.close();
    }
}

 

불필요한 0을 .stripTrailingZeros()를 사용하여 제거해주었다. 하지만 이 코드 역시 오답이다.

BigDecimal의 생성 과정에서 부동소수점의 오차를 막기 위해 입력에서 10진수 문자열로 처리해야한다. 

 

정답 코드

 

import java.util.*;
import java.math.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigDecimal a = new BigDecimal(sc.next());
        int b = sc.nextInt();
        
        BigDecimal result = a.pow(b).stripTrailingZeros();
        
        System.out.println(result.toPlainString());
        sc.close();
    }
}

 

new BigDecimal(sc.next())를 사용하여 문자열로 입력을 받았다.

또한 출력문에서 .toPlainString()을 사용함으로써 지수 표기법 없이 출력하게 했다.

 

 

 

 

감사합니다 (. ❛ ᴗ ❛.)

'Algorithm' 카테고리의 다른 글

[Algorithm] 그리디 알고리즘 (Greedy Algorithm) + 백준 1931번  (0) 2025.04.09
[Java] 백준 1914번 : 하노이 탑  (0) 2025.03.06
[C/Python] 백준 2477번 : 참외밭  (0) 2025.03.05
[C/C++] 백준 2960번 : 에라토스테네스의 체  (0) 2025.02.20
[C/C++] 백준 2740번 : 행렬 곱셈  (0) 2025.02.01
'Algorithm' 카테고리의 다른 글
  • [Java] 백준 1914번 : 하노이 탑
  • [C/Python] 백준 2477번 : 참외밭
  • [C/C++] 백준 2960번 : 에라토스테네스의 체
  • [C/C++] 백준 2740번 : 행렬 곱셈
knhye
knhye
  • 전체
    오늘
    어제
  • knhye
    3n1hye_
    knhye
  • 링크

    • GitHub
    • 분류 전체보기 (61)
      • Development (28)
        • Back-end (21)
        • DB (3)
        • CS (4)
      • Algorithm (6)
      • DevOps (10)
        • git (1)
        • Cloud Platform (5)
        • CICD (1)
        • Cloud Native (2)
      • Internet (2)
      • 매일메일 (6)
      • 회고 (5)
        • Capstone (2)
        • Hackathon (1)
        • 2025 (2)
      • 자격증 (1)
      • 블로그 리딩 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhye
[Java] 백준 10827번 : a^b
상단으로

티스토리툴바