문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, 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]을 리턴해야 합니다.
⭕ 풀이
class Solution {
public int[] solution(int n, int m) {
int[] result = new int[2];
int cnt = 1;
int temp = m;
while(temp<=n*m) {
if(temp%n==0&&temp%m==0) {
result[0] = n/cnt;
result[1] = temp;
break;
}
temp = m * ++cnt;
}
return result;
}
}
cnt - 최소공배수를 구하기위해 입력받은 정수 m에 1씩 증가시키며 곱할 변수
temp - m * cnt 를 담을 변수 (반복문이 돌때마다 m*++cnt로 초기화됨)
이 두 변수를 선언하여 temp이 n과 m의 공배수라면 반환할 int배열 result의 [0], [1]에 담는다.
입력받은 작은 정수를 증가시킨 cnt로 나누면 최대공약수가 된다.
예를들어 4, 9 를 입력받았다면
둘의 최소공배수가아닌 최대공배수는 4*9 36 이 될것이므로 while문의 조건을 n*m까지로 제한해둔다.
이후
9*1 = 9
9*2 = 18
9*3 = 27
9*4 = 36 이런식으로 cnt를 1씩 증가시키는데 공배수가 되는 36까지 왔다면 cnt는 4일것이다.
그럼 n을 cnt로 나누게되면 1 즉 최대공약수가 된다.
-출처
https://school.programmers.co.kr/learn/courses/30/lessons/12940
'Algorithm > Programmers(Java)' 카테고리의 다른 글
| [프로그래머스/Lv.1] 이상한 문자 만들기 (0) | 2022.12.24 |
|---|---|
| [프로그래머스/Lv.1] 같은 숫자는 싫어 (0) | 2022.12.24 |
| [프로그래머스/Lv.1] 직사각형 별찍기 (0) | 2022.12.22 |
| [프로그래머스/Lv.1] 행렬의 덧셈 (0) | 2022.12.22 |
| [프로그래머스/Lv.1] 부족한 금액 계산하기 (0) | 2022.12.22 |