문제
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
제한 사항
- arr은 길이 1이상, 15이하인 배열입니다.
- arr의 원소는 100 이하인 자연수입니다.
입출력 예
분석
- 2개의 숫자 a, b의 최소공배수를 구하는 공식
: a * b / (a, b의 최대공약수) - 2개의 숫자 a, b의 최대공약수를 구하는 방법
(1) BigInteger.gcd 함수 이용
BigInteger b1 = BigInteger.valueOf(a);
BigInteger b2 = BigInteger.valueOf(b);
BigInteger gcd = b1.gcd(b2);
return gcd.intValue();
(2) 유클리드호제법으로 직접 구현 : 자세한 코드는 하기 참조
더보기
### 유클리드 호제법을이용한 최대공약수를 구하는 코드
public class GCDExample {
// 유클리드 호제법을 이용한 최대공약수 계산
public static int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
public static void main(String[] args) {
int a = 24;
int b = 36;
int gcdValue = gcd(a, b);
System.out.println("최대공약수: " + gcdValue); // 결과: 12
}
}
피드백
- 솔직히 AI의 도움을 많이 받았다. 최소공배수를 구하는 법, 최소공배수를 구하기 위해 필요한 최대공약수를 구하는 법 등. 알고리즘이 어렵다기보단 아마 이런 별도의 도움 없이 바로바로 수학적으로 풀어낼 수 있느냐가 중요해서 레벨 2인 걸까.
답안
class Solution {
public static int solution(int[] arr) {
int answer = 0;
answer = arr[0];
for(int i = 1; i < arr.length; i++) {
answer = lcm(answer, arr[i]);
}
return answer;
}
// 최대공약수를 통해 최소공배수 계산
public static int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
// 유클리드 호제법을 이용한 최대공약수 계산
public static int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
}
다른 사람의 답안
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
class NLCM {
public long nlcm(int[] num) {
long answer = num[0], g;
for (int i = 1; i < num.length; i++) {
g = gcd(answer, num[i]);
answer = g * (answer / g) * (num[i] / g);
}
return answer;
}
public long gcd(long a, long b) {
if (a > b)
return (a % b == 0) ? b : gcd(b, a % b);
else
return (b % a == 0) ? a : gcd(a, b % a);
}
public static void main(String[] args) {
NLCM c = new NLCM();
int[] ex = { 2, 6, 8, 14 };
// 아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(c.nlcm(ex));
}
}
🔗링크
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'코딩테스트 > 프로그래머스Programmers' 카테고리의 다른 글
[프로그래머스][Lv.2][JAVA]할인 행사 (0) | 2024.08.31 |
---|---|
[프로그래머스][Lv.2][JAVA][월간 코드 챌린지 시즌2]괄호 회전하기 (0) | 2024.08.17 |
[프로그래머스][Lv.2][JAVA]피보나치 수 (0) | 2024.07.13 |
[프로그래머스][Lv.2][JAVA]귤 고르기 (0) | 2024.07.06 |
[프로그래머스][Lv.2][JAVA]점프와 순간 이동 (0) | 2024.06.24 |