Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 자바
- 데이터베이스
- 오라클
- Java
- 코딩테스트
- 1lv
- 참조형
- 프로그래머스
- 프로시저
- oracle
- programmers
- 알고리즘
- StringBuffer
- toLowerCase
- substring
- SQL
- 문자열
- Math.max
- Linux
- PARSEINT
- string
- 짝수
- Integer
- 1단계
- 배열
- 1level
- 코테
- Math.min
- 1레벨
- 디비
Archives
- Today
- Total
웹 프로그래밍
[프로그래머스(Programmers)] 최대공약수와 최소공배수 - JAVA 본문
문제 설명
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환하면 됩니다. 예를들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
두 수는 1이상 1,000,000이하의 자연수 입니다.
입출력 예 설명
입출력 예 #1
위의 설명과 같습니다.
입출력 예 # 2
자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.
풀이
문제를 해결하기 위해 유클리드 알고리즘(호제법)을 알아야 합니다.
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
Math.max(a, b) 함수는 두 개의 수 중에 더 큰 것을 반환하게 됩니다.
Math.min(b, c) 함수는 두 개의 수 중에 더 작은 것을 반환하게 됩니다.
class Solution {
public int[] solution(int n, int m) {
int[] answer = new int[2];
int bigger = Math.max(n, m); // 더 큰 수를 bigger에 담기
int smaller = Math.min(n, m); // 더 작은 수를 smaller에 담기
while(smaller > 0) { // 유클리드 알고리즘 참고
int temp = bigger % smaller;
bigger = smaller;
smaller = temp;
}
answer[0] = bigger;
answer[1] = (n*m) / answer[0];
return answer;
}
}
'프로그래머스 > level1' 카테고리의 다른 글
[프로그래머스(Programmers)] 문자열을 정수로 바꾸기 - JAVA (0) | 2021.10.20 |
---|---|
[프로그래머스(Programmers) 약수의 합] - JAVA (0) | 2021.10.20 |
[프로그래머스(Programmers)] 핸드폰 번호 가리기 - JAVA (0) | 2021.10.13 |
[프로그래머스(Programmers)] 행렬의 덧셈 - JAVA (0) | 2021.10.13 |
[프로그래머스(programmers)] x만큼 간격이 있는 n개의 숫자 - JAVA (0) | 2021.10.12 |