반응형
문제 설명
https://programmers.co.kr/learn/courses/30/lessons/12940
코딩테스트 연습 - 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의
programmers.co.kr
문제 풀이
public class Sol44 {
public int[] solution(int n, int m) {
int[] answer = {n, m};
int max = n, min = m;
int remainder;
if (n == m) {
return answer;
} else if (m > n) {
max = m;
min = n;
}
while (min != 0) { //나머지가 있으면
remainder = max % min; // 큰수에서 작은 수를 나눈 나머지
max = min; //나눠질 수를 설정
min = remainder; //나눌 수를 설정
}
answer[0] = max; //최대공약수
answer[1] = max * (n / max) * (m / max); //최대공약수로 나눈 몫끼리 곱 * 최대공약수 하면 최소공배수!!
return answer;
}
public static void main(String[] args) {
Sol44 method = new Sol44();
for (int i : method.solution(3, 12)) {
System.out.print(i + " ");
}
}
}
유클리드 호제법을 반복문으로 간단하게 구현해보았다! 최소공배수의경우 최대공약수를 알면 쉽게 구할 수 있다. 재귀함수를 사용해서 구현할 수도 있지만 실행 시간면에서 반복문으로 구현하는 것이 더 좋을 것이라고 생각하여 반복문으로 구현을 해보았다.
관련 개념
유클리드 호제법은 다음과 같다.

기존 최대공약수 계산법의 단점
1. 숫자가 크면 계산이 복잡하다
: 위 계산식에서 보듯이 숫자가 커지면 커질수록 엄청 많이 나누어야 한다!
: 코드로 구현하면 짝수인지 홀수인지 판단 후 나눠야 하므로 연산이 더욱 많다.
2. 약수 찾기가 어렵다
: 위와 같은 개념으로 최대 공약수를 계산하는 것이 복잡하면 약수를 찾는 것 또한 복잡하다.
반응형
'코테풀이' 카테고리의 다른 글
| [프로그래머스 Lv.1 - Java] 수박수박수박수박수박수? (0) | 2021.11.10 |
|---|---|
| [프로그래머스 Lv.1 - Java] 서울에서 김서방 찾기 (0) | 2021.11.10 |
| [프로그래머스 Lv.1 - Java] 문자열 다루기 기본 (0) | 2021.11.10 |
| [프로그래머스 Lv.1 - Java] 문자열 내 p와 y의 개수 (0) | 2021.11.10 |
| [프로그래머스 Lv.1 - Java] 내적 (0) | 2021.11.10 |