문제 설명

제한 사항

입출력 예

풀이
import java.util.Collections;
import java.util.HashSet;
class Solution {
public int[] solution(int n, int m) {
HashSet<Integer> nSet = new HashSet<>();
HashSet<Integer> mSet = new HashSet<>();
for (int i = 1; i <= (int)Math.sqrt(n); i++) {
if (n % i == 0) {
nSet.add(i);
nSet.add(n / i);
}
}
for (int i = 1; i <= (int)Math.sqrt(m); i++) {
if (m % i == 0) {
mSet.add(i);
mSet.add(m / i);
}
}
nSet.retainAll(mSet);
return new int[] { Collections.max(nSet), n / Collections.max(nSet) * m};
}
}
후기
내용상으로는 초등 교육 과정이었나? 배운지 오래돼서 기억이 잘 안 난다. 최대공약수는 두 수의 약수 중에서 양쪽 다 가지고 있는 가장 큰 약수를 구하면 되고 최소공배수는 두 수의 곱에서 최대공약수를 나눠주면 된다. 문제에서 주어지는 범위가 크길래 int[1]을 구할 때 혹시 몰라서 계산 순서를 바꿨는데 n * m으로 다시 제출해보니 그럴 필요는 없었던 것 같다. 아무래도 순서는 결과와 상관이 없는 것 같다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][JAVA][Lv. 1] 짝수와 홀수 (0) | 2023.08.07 |
|---|---|
| [프로그래머스][JAVA][Lv. 2] 카펫 (0) | 2023.08.07 |
| [프로그래머스][JAVA][Lv. 2] 과제 진행하기 (0) | 2023.08.04 |
| [프로그래머스][Java][Lv. 2] 의상 (0) | 2023.08.03 |
| [프로그래머스][JAVA][Lv. 2] 올바른 괄호 (0) | 2023.08.03 |