22.5.11 [HackerRank]Java Exception Handling

서태욱·2022년 5월 11일
0

Algorithm

목록 보기
41/45
post-thumbnail

✅ 문제 분석

계산기를 구현해서 숫자의 거듭제곱을 계산한다.
단일 메소드 long power(int, int)를 가진 MyCalculator 클래스를 만들어서 작성해야 한다.
파라미터로 n과 p 두 정수를 사용하는데,예컨대 n의 p 제곱 형태다.
둘중 하나가 음수라면 메소드는 예외를 던져 "n or p should not be negative"라는 문구를 출력한다.
또 만약 둘다 0이라면 예외를 던지고 "n and p should not be zero"라는 문구를 출력한다.
MyCalculator 클래스 안의 power 함수를 완성하고 적절한 예외를 던진 후에 적절한 값을 반환하도록 한다.

두 정수 n과 p가 각 줄에 입력된다. online judge에 잠겨있는 stub code는 입력을 읽어 값을 파라미터로 메소드에 보낸다.

출력은 각 줄에 (두 값이 양수인경우) n의 p제곱 결과가 출력되고,
둘중 하나가 음수이거나, 둘다 0인 예외가 발생하면 그 예외를 출력해줘야 한다.

🌱 배경지식

자동 형 변환

double a = 3.0F;

위의 코드는 double 타입의 변수 a에 float 타입의 값을 대입하고 있다. 이 때 3.0F의 값은 자동으로 double 타입으로 형 변환이 일어난다. 이것이 가능한 이유는 double 타입이 float 타입보다 더 많은 수를 표현 할 수 있기 때문이다. 타입을 변경해도 정보의 손실이 일어나지 않는 경우 자동 형 변환이 일어난다.
표현범위가 좁은 데이터 타입에서 넓은 데이터 타입으로의 변환만 허용된다는 것이 자동 형 변환의 원칙이다. 예컨대 byte 타입은 short가 될 수 있지만 short는 byte 타입이 될 수 없다.

명시적 형 변환

float a = 100.0;
int b = 100.0F;
        ↓
float a = (float)100.0;
int b = (int)100.0F;

이처럼 괄호 안에 데이터 타입을 지정해서 값 앞에 위치시키는 것을 명시적인 형 변환이라고 부른다.

✏️ 해설

import java.util.Scanner;
class MyCalculator1 {
    /*
     * Create the method long power(int, int) here.
     */
    public static long power(int n, int p) throws Exception {
        if( n<0 || p<0 ) {
            throw new Exception("n or p should not be negative.");
        } else if ( n==0 && p==0 ) {
            throw new Exception("n and p should not be zero.");
        }
        return (int) Math.pow(n,p); //Math.pow(x,y)는 반환 디폴트가 double이어서 int로 cast 해줌
    }
}

public class ExceptionHandling {
    public static final MyCalculator1 my_calculator = new MyCalculator1();
    public static final Scanner in = new Scanner(System.in);

    public static void main(String[] args) {
        while (in .hasNextInt()) {
            int n = in .nextInt();
            int p = in .nextInt();

            try {
                System.out.println(my_calculator.power(n, p));
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    }
}

👉 참고

profile
re:START

0개의 댓글