반응형
사이트명 : 프로그래머스(Programmers)
문제명 : 최대공약수와 최소공배수
언어 : 자바(Java)
일단 최대공약수란?
두 수를 나눴을 때 (3, 12라 가정)
두 수를 같은 수로 나누었을 때 나머지가 0인 값 중에 가장 큰 수!!
그 다음으로 최소공배수란? 두 수를 계속 같은 수로 곱하다가
두 숫자의 값이 같아지는 경우!!
(2와 5를 서로 *2*2*2 *5*5*5 이런 식으로 하다가 보면 10에서 같아짐)
그냥 정직하게 풀면 효율성에서 걸려서 유클리드 호제법을 사용해야 하는데
두 수를 곱한 뒤 최대공약수로 나누면 최소공배수를 구할 수 있다
즉 최대공약수를 먼저 구한 뒤 최소공배수를 구하면 된다는 것이다
내 풀이방법은 아래와 같은데
먼저 받은 두 값 중에서
큰 값을 먼저 구한 뒤에
큰 값을 가지고 최대공약수를 구하는데
큰 값에서 1씩 줄여보면서 두 값을 가지고 나눴을 때 0으로 나눠 떨어진다면
그게 바로 최대공약수!
최대공약수를 구한 순간
바로 유클리드 호제법을 사용해서
두 수를 곱한 뒤에 최대공약수로 나누면 최소공배수가 되므로
최대공약수를 answer 0번에
최소공배수를 answer 1번에 반환하면 끝이 난다
마지막으로 프로그래머스에 바로 적용 가능한 답안은 아래와 같다
class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int largeVal = 0;
// 큰 수 찾기
if(n < m) {
largeVal = m;
} else {
largeVal = n;
}
// 최대공약수 구하기
int i = largeVal;
while(1 < largeVal) {
if (n % i == 0 && m % i == 0) {
// 유클리드 호제법 : 두 수를 곱한 뒤 최대공약수로 나누면 최소공배수
answer[0] = i;
answer[1] = n * m / i;
break;
}
i = i -1;
}
return answer;
}
}
반응형
'Language > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 평균 구하기(Java) (0) | 2019.09.16 |
---|---|
프로그래머스 콜라츠 추측(Java) (0) | 2019.09.11 |
프로그래머스 짝수와 홀수 풀이(Java) (0) | 2019.09.05 |
프로그래머스 제일 작은 수 제거하기 풀이(Java) (0) | 2019.09.05 |
프로그래머스 정수 제곱근 판별 풀이(Java) (0) | 2019.09.05 |
댓글