프로그래머스 N개의 최소공배수(java)
2023. 1. 19. 16:06ㆍ코딩테스트/프로그래머스
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12953
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
N개의 숫자의 최소공배수를 구해는 문제이다.
이 문제는 유클리드 호제법(유클리드 알고리즘) 이용하여 푸는 것이 좋다.
유클리드 호제법은 두 수의 최대공약수를 구하는 방법인데
숫자 a, b에 대해서 a와 b를 나눈 나머지를 r이라고 할 떄 a와 b의 최대공약수와 b와 r의 최대공약수가 같다.
이 원리를 이용하여 나머지가 0이 될때까지 계산하면 a와 b의 최대공약수를 구할 수 있다.
최소공배수 = (a * b ) / 최대공약수
나의 풀이
class Solution {
public int solution(int[] arr) {
int aLength = arr.length;
// 원소가 1개일 경우
if (aLength == 1) {
return arr[0];
}
// 원소가 2개일 경우
int gcd = getGCD(arr[0], arr[1]);
int lcm = (arr[0] * arr[1]) / gcd;
// 원소가 3개 이상일 경우
for (int i = 2; i < aLength; i++) {
gcd = getGCD(lcm, arr[i]);
lcm = (lcm * arr[i]) / gcd;
}
return lcm;
}
// 최대공약수 구하기
public int getGCD(int num1, int num2) {
if (num1 % num2 == 0) {
return num2;
}
return getGCD(num2, num1 % num2);
}
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 점프와 순간 이동(java) (0) | 2023.01.26 |
|---|---|
| 프로그래머스 예상 대진표(java) (0) | 2023.01.26 |
| 프로그래머스 구명보트(java) (0) | 2023.01.19 |
| 프로그래머스 영어 끝말잇기(java) (0) | 2023.01.19 |
| 프로그래머스 - 짝지어 제거하기(java) (2) | 2023.01.18 |