럿고의 개발 노트
[프로그래머스] 최대공약수와 최소공배수 본문
[프로그래머스] 코딩테스트 연습
최대공약수와 최소공배수
간략한 문제 풀이
최대공약수와 최소공배수를 구하는 문제로, BigInteger라는 클래스를 처음 써보게 되었네요.
저는 알고리즘 문제를 푸는 첫번째 이유는 자바라는 언어에 익숙해지고, 새로운 메소드들을 배워가면서 익숙해지기 위함이라 알고리즘적으로 푸는 것보다는 API 메소드를 이용해서 풀려고 많이 노력을 하고 있습니다.
그래서 알고리즘 문제를 풀어도, 글을 보시는 분들과는 생각이 조금 다를 수 있습니다....ㅎㅎ
BigInteger Class
- BigInteger Java API 12
- BigInteger Class는 long타입보다 큰 자료형으로 범위는 무한대이다.
- 자바 API에서는 Immutable arbitrary-precision integers.(불변한 임의의 정밀한 정수)라고 정의되어 있다.
- 사칙연산과 비교연산은 모두 메소드로 정의되어있다.(add, subtract, mutiply, devide, equals)
- BigInteger의 간단한 설명
- gcd()메소드는 최대공약수를 BigInteger로 리턴하는 메소드이다.
- intValue()메소드는 int형으로 형변환 하는 메소드이다.
최소공배수 구하는 법
- A * B = L * G (A : 자연수1, B : 자연수2, L : 자연수1과 자연수2의 최소공배수, G : 자연수1과 자연수2의 최대공약수)
- 위의 식으로 최소공배수를 구하면
L = (A * B) / G가 된다. - 이번문제에서 최소공배수를 구한 방법으로, 최소공배수를 구하는 방법은 여러가지 있다.
문제 및 풀이
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
두 수는 1이상 1000000이하의 자연수입니다.
입출력 예
n | m | return |
---|---|---|
3 | 12 | [3, 12] |
2 | 5 | [1, 10] |
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 #2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
import java.math.BigInteger;
import java.util.Arrays;
/**
* @ClassName : GcdOrLcm
* @ProblemName : 최대공약수와 최소공배수
* @URL : https://programmers.co.kr/learn/courses/30/lessons/12940
* @Description : 최대공약수(Greatest Common Divisor) / 최소공배수(Last Common Multiple)
*/
public class GcdOrLcm {
public int[] solution(int n, int m){
int[] answer = new int[2];
BigInteger bigInteger1 = BigInteger.valueOf(n);
BigInteger bigInteger2 = BigInteger.valueOf(m);
BigInteger gcd = bigInteger1.gcd(bigInteger2);
answer[0] = gcd.intValue();
answer[1] = (m * n) / gcd.intValue();
return answer;
}
// Test Case
public static void main(String[] args) {
GcdOrLcm gcdOrLCM = new GcdOrLcm();
int n1 = 3;
int n2 = 2;
int m1 = 12;
int m2 = 5;
System.out.println(Arrays.toString(gcdOrLCM.solution(n1, m1)));
System.out.println(Arrays.toString(gcdOrLCM.solution(n2, m2)));
}
}
'Java Note > Algorithmus' 카테고리의 다른 글
[프로그래머스] 평균 구하기 (0) | 2020.01.31 |
---|---|
[프로그래머스] 콜라츠 추측 (0) | 2020.01.30 |
[프로그래머스] 짝수와 홀수 (0) | 2020.01.28 |
[프로그래머스] 제일 작은 수 제거하기 (0) | 2020.01.27 |
[프로그래머스] 정수 제곱근 판별 (0) | 2020.01.26 |
Comments