본문 바로가기
BE/Java

Math 클래스 메소드

by 이건 뭐야 2024. 5. 2.

프로그래머스에서 '정수 제곱근 판별' 문제를 풀면서 if문과 while문을 사용해서 풀었는데 다른 사람들의 풀이를 보니 java.lang 패키지에 포함되어 있는 Math 클래스를 사용한 것을 보았다.

 

Math 클래스에서는 수학적인 연산을 위한 메소드들을 제공하며, Math 클래스의 메소드를 사용하면 식을 조금 더 간단하고 직관적으로 알 수 있을 것 같기 때문에 Math 클래스의 메소드에 대해서 알아보겠다.

 

그리고 프로그래머스에서 Math 클래스 메소드를 활용할 수 있는 프로그래머스 문제도 풀어보도록 하겠다.

 

구분 메소드
절댓값 / 부호 abs, signum
최댓값 / 최솟값 max, min
소수점 올림 / 버림 ceil, floor, round, rint
제곱 / 제곱근 pow, scalb, sqrt, cbrt, hypot
삼각함수 관련 toRadians, toDegrees, sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh
로그 관련 exp, getExponent, expm1, log, log1p, log10
난수 관련 random  =>  java.util.Random 클래스 사용 권장!
소수 관련 ulp, nextAfter, nextUp, copySign

 

 

절댓값 / 부호 / 최댓값 / 최솟값

abs() : 절댓값 계산

signum() : 부호 확인 (양수일 경우 1.0, 음수일 경우 -1.0 반환)

min() : 두 개의 매개변수 중 작은 값 반환

max() : 두 개의 매개변수 중 큰 값 반환

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.abs(-123));
        System.out.println(Math.abs(123));
        System.out.println(Math.signum(21));
        System.out.println(Math.signum(-14));
        System.out.println(Math.max(-3, -5));
        System.out.println(Math.max(1.2, 2));
        System.out.println(Math.min(-8, 2));
    }
}


// 출력 결과
123
123
1.0
-1.0
-3
2.0
-8

 

 

소수점 올림 / 소수점 버림 / 올림 / 버림

round() : 소수점 반올림 (정수형 반환)

rint() : 소수점 반올림 (double형 반환)

ceil() : 올림

floor() : 버림

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.round(2.4));
    	System.out.println(Math.round(2.5));
    	System.out.println(Math.rint(2.4));
    	System.out.println(Math.rint(-1.8));
    	System.out.println(Math.ceil(-1.7));
    	System.out.println(Math.ceil(4.2));
    	System.out.println(Math.floor(3.9));
    	System.out.println(Math.floor(-3.6));
    }
}


// 출력 결과
2
3
2.0
-2.0
-1.0
5.0
3.0
-4.0

 

 

제곱 / 제곱근

sqrt() : 매개변수의 제곱근 반환

cbrt() : 매개변수의 세제곱근 반환

pow() : 첫 번째 매개변수의 두 번째 매개변수만큼의 제곱 값 반환

scalb() : 첫 번째 매개변수 * (2^두 번째 매개변수) 값 반환

hypot() : (첫 번째 매개변수의 제곱 + 두 번째 매개변수의 제곱)의 제곱근 반환

public class Main {
    public static void main(String[] args) {
        System.out.println(Math.sqrt(16));
    	System.out.println(Math.sqrt(25));
    	System.out.println(Math.cbrt(8));
    	System.out.println(Math.cbrt(64));
    	System.out.println(Math.pow(2, 6));
    	System.out.println(Math.pow(3, 3));
    	System.out.println(Math.scalb(3, 4));
    	System.out.println(Math.hypot(3, 4));
    }
}


// 출력 결과
4.0
5.0
2.0
4.0
64.0
27.0
48.0
5.0

 

 

프로그래머스 문제 풀이 - 최대공약수와 최소공배수

class Solution {
    public int[] solution(int n, int m) {
        int maxNum = Math.max(n, m);
        int minNum = Math.min(n, m);

        // 최대 공약수
        while (minNum != 0) {
            int abc = maxNum % minNum;
            maxNum = minNum;
            minNum = abc;
        }

        // 최소 공배수
        int def = n * m / maxNum;

        int[] answer = {maxNum, def};
        return answer;
    }
}

 

 

 

그 외

Math.random()과 java.util.Random 클래스는 둘 다 난수를 생성하는 데 이용된다. 그러나 java.util.Random 클래스를 사용하는 것이 권장된다.

 

1. 다양한 형태의 난수 생성 : 정수, 실수, boolean 값 등 다양한 형태의 난수를 생성할 수 있으며, 시드값을 설정하여 생성되는 난수의 패턴을 제어할 수 있다.

 

2. Thread-safe : java.util.Random 클래스는 멀티스레드 환경에서 안전하게 사용할 수 있도록 설계되어 있습니다. Math.random()은 내부적으로 Random 인스턴스를 생성하여 사용하기 때문에 멀티스레드 환경에서의 안전성이 보장되지 않는다.

 

3. 객체 지향적인 설계 : java.util.Random 클래스는 객체 지향적인 설계를 따르고 있기 때문에 모듈화되고 유지보수가 용이합니다.

 

 

 

더 궁금한 Math 클래스에서 제공하는 메소드는 Java 공식 document를 참조하면 된다!

 

 

 

 

 

참조

Math 주요 메서드 정리 - 기억의 정류장 님

최대공약수와 최소공배수 - 프로그래머스 문제

 

 

'BE > Java' 카테고리의 다른 글

정수 오버플로우(Integer overflow)  (0) 2024.03.20
Java 문법 charAt, join, repeat  (0) 2024.03.17
삼항 연산자  (0) 2024.03.13
Java에서 CSV파일 읽기  (0) 2024.03.09
Java 클래스  (0) 2024.02.27