일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 티스토리챌린지
- SQL Mapper
- java
- 다형성
- sec태그
- @modelattibute
- spring security 설정
- spring security 로그인정보 가져오기
- 캡슐화
- CPU
- 프로그래머스
- 오버로딩
- 입출력
- 자바의정석
- 쿠키
- 오블완
- 리눅스
- hackerrank
- 자바의 정석
- 멀티프로세싱
- 오버라이딩
- spring security
- 멀티태스킹
- 혼공얄코
- charset 변경
- mvc 구성요소
- 로그인정보 가져오기
- mvc 동작
- over()
- 객체지향
- Today
- Total
쉽게 쉽게
[Java] 최대공약수, 최소공배수 구하기 본문
▤ 목차
1. 최대공약수 구하기
최대공약수란 0이 아닌 두 개 이상의 정수의 공통되는 약수 중에서 가장 큰 수이다.
여기서 유클리드 호제법을 이용하여 간편하게 최대공약수를 구할 수 있다.
유클리드 호제법의 핵심은 큰 수를 작은 수로 나누어 떨어지게 한 뒤, 수를 반복적으로 수행하여 나머지 0이 될 때까지 작동하는 방법을 의미한다. 이때 작은 수가 최대공약수다. (주의할 점은 큰 수를 작은 수로 나눠야 한다는 것)
예를 들어 1071과 1029의 최대공약수를 구하면,
- 1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. ≫ 42
- 1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. ≫ 21
- 42는 21로 나누어 떨어진다.
- 따라서, 최대공약수는 21이다.
더 자세하게 알아보려면 아래의 링크를 참고하길 바란다.
https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
유클리드 호제법 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란
ko.wikipedia.org
만약 유클리드 호제법을 이용하지 않는다면 아래처럼 구현하게 될 것 이다.
이는 숫자가 클수록 비효율적인 방법이 되기 때문에 이용하지 않는 편이 좋다.
int max = 0; //최대 공약수
for(int i=1; i<=num1 && i<=num2; i++) {
if(num1%i==0 && num2%i==0){
max = i;
}
}
유클리드 호제법을 이용하면 아래처럼 두 가지 방식으로 구현할 수 있다.
// 재귀 방식
public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
// 반복문 방식
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
2. 최소공배수 구하기
최소공배수는 (a✕ b) / (최대 공약수) 이므로 어렵지 않게 구할 수 있다.
public static int lcm(int a, int b) {
return a * b / gcd(a, b);
}
3. 2개 이상 숫자의 최대공약수와 최소공배수 구하기
최대공약수 구하기
public static int gcd(int[] arr) {
int result = arr[0];
for (int i = 1; i < arr.length; i++) {
result = gcd(result, arr[i]);
}
return result;
}
public static int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
- arr 배열에 있는 모든 수의 “최대공약수” 구하는 것이 목표
- 반복문을 통해 배열의 나머지 값들과 최대공약수를 구하여 result 변수에 저장
- (result = arr[0]) -> (result = arr[0]와 arr[1]의 최대공약수) -> (arr[0]과 arr[1] 최대공약수와 arr[2]의 최대공약수)...
- 최종적으로 result는 배열에 있는 숫자의 최대공약수가 된다.
최소공배수 구하기
public static int lcm(int[] arr) {
int result = arr[0];
for (int i = 1; i < arr.length; i++) {
result = lcm(result, arr[i]);
}
return result;
}
public static int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
- arr 배열에 있는 모든 수의 “최소공배수” 구하는 것이 목표
- 반복문을 통해 배열의 나머지 값들과 최소공배수를 구하여 result 변수에 저장
- (result = arr[0]) -> (result = arr[0]와 arr[1]의 최소공배수) -> (arr[0]과 arr[1] 최소공배수와 arr[2]의 최소공배수)...
- 최종적으로 result는 배열에 있는 숫자의 최소공배수가 된다.
[Java/Short] 최대공약수, 최소공배수 구하는 방법 : 두 수 또는 N개의 수
해당 글에서는 최대공약수와 최소공배수를 구하는 방법에 대해서 짧게 이해하는 방법에 대해서 공유합니다. 💡 해당 글을 이해하기 전에 상세하게 이해하고 싶다하시면 아래의 글이 큰 도움이
adjh54.tistory.com
https://programmer-chocho.tistory.com/9
[JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기
최대 공약수 구하는 방법 1. 숫자가 2개인 경우 1) 두 수를 공약수로 계속 나눈다. 2) 공약수로 나눈 몫이 서로소가 되면 stop 3) 왼쪽 공약수를 모두 곱한다. ∴ 60 과 48의 최대 공약수 : 2 ✕ 2 ✕ 3 = 1
programmer-chocho.tistory.com
[Java]최대 공약수, 최소 공배수 구하기(feat.유클리드 호제법)
안녕하세요 코북입니다. 오늘은 최대 공약수와 최소 공배수를 구하는 문제를 풀어봤습니다. 풀이가 다양하여 제가 푼 방식을 공유해보려고 합니다. 첫 번째 방식은 문제에 나와있는 것처럼 최
cobook.tistory.com
잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다. |
![](https://t1.daumcdn.net/keditor/emoticon/face/large/055.png)
'개발공부 > Java' 카테고리의 다른 글
[Java] Map 메서드 활용법 (0) | 2024.11.19 |
---|---|
[Java] 소수 구하기 (2) | 2024.09.26 |
[Java] 약수의 개수 구하기 (0) | 2024.09.15 |
[Java] FILE 업로드(다중) (0) | 2024.04.28 |
Map에 있는 값 형변환하기 (1) | 2023.11.19 |