[프로그래머스] "최대공약수와 최소공배수" (Java)
글 작성자: bbangson
반응형
https://programmers.co.kr/learn/courses/30/lessons/12940
코딩테스트 연습 - 최대공약수와 최소공배수
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의
programmers.co.kr
유클리드 호제법을 알면 쉽게 풀 수 있는 문제입니다. 알고리즘이 정해져 있는 문제는 특정 알고리즘을 아예 외우는 것도 방법이라고 생각합니다.
http://lonpeach.com/2017/11/12/Euclidean-algorithm/
- void solution(int n, int m)
파라미터는 입력 받고, 입력 받은 두 수를 큰 수는 big, 작은 수는 small에 넣어줍니다. 그리고 gcd()메소드를 호출하고 그에 따라 최대공약수, 최소공배수를 구합니다. 최소공배수는 주어진 두 수를 곱하고 최대 공약수를 나누면 됩니다.
- int gdc(int big, int small)
최대공약수를 더하는 메소드입니다. 간단하게 설명하자면, big을 small로 나눕니다. 나누어 떨어지면 small이 최대공약수 이고 나누어 떨어지지 않으면 재귀 호출을 통해 기존 small 값을 big에 넣고, small자리에는 big%small 연산 결과 값이 들어갑니다.
코드
import java.util.*;
public class solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int big = 0, small =0; // 2) 큰 수, 작은 수를 나눠주기 위한 변수 생성.
if(n>m) { // 3) 둘 중에 큰수를 big, 작은 수를 small에 저장해주자.
big = n;
small = m;
} else {
big = m;
small = n;
}
answer[0] = gcd(big, small); // 최대공약수
answer[1] = big*small / answer[0]; // 최소공배수
return answer;
}
// 유클리드 호제법을 이용한 최대공약수이다.
public int gcd(int big, int small) {
if(big % small == 0) { // 만약 나누어 떨어지면 small이 최대공약수가 된다.
return small;
}
// 7) 나누어 떨어지지 않으면 small이 big 자리에 가고 small자리에는 big을 small로 나눈 나머지 값이 온다.
return gcd(small, big%small);
}
}
※ 피드백 얼마든지 환영합니다.
반응형
'문제 풀이 > Java' 카테고리의 다른 글
[백준] 17425번 - "약수의 합" (Java) (2) | 2021.02.25 |
---|---|
[백준] 15661번 - "링크와 스타트" (Java) (2) | 2021.02.22 |
[백준] 14889번 - "스타트와 링크" (Java) (0) | 2021.02.21 |
[백준] 1759번 - "암호 만들기" (Java) (0) | 2021.02.20 |
[백준] 1514번 - "잃어버린 괄호" (Java) (0) | 2020.09.04 |
댓글
이 글 공유하기
다른 글
-
[백준] 15661번 - "링크와 스타트" (Java)
[백준] 15661번 - "링크와 스타트" (Java)
2021.02.22 -
[백준] 14889번 - "스타트와 링크" (Java)
[백준] 14889번 - "스타트와 링크" (Java)
2021.02.21 -
[백준] 1759번 - "암호 만들기" (Java)
[백준] 1759번 - "암호 만들기" (Java)
2021.02.20 -
[백준] 1514번 - "잃어버린 괄호" (Java)
[백준] 1514번 - "잃어버린 괄호" (Java)
2020.09.04