반응형
문제는 여기서!
https://school.programmers.co.kr/learn/courses/30/lessons/12953
문제설명
더보기
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
제한 사항
- arr은 길이 1이상, 15이하인 배열입니다.
- arr의 원소는 100 이하인 자연수입니다.
입출력 예
arr | result |
[2,6,8,14] | 168 |
[1,2,3] | 6 |
문제해결 keyPoint
- 유클리드 호제법은 그냥 외우자
- A,B,C 가 있을때 A,B의 최소공배수 L과 C의 최소공배수는 A,B,C 의 최소공배수와 같다.
20220929 1차시도
더보기
최소공배수, 최대공약수를 구하는 법은 또 까먹어서.. 그냥 풀이를 참고했다.
사실 최소공배수, 최대공약수 문제를 예전에 머리 쥐어 뜯어가며 풀었었는데, 그렇게 스스로 풀어도 잊어먹는다 ㅋㅋㅋㅋㅋㅋ 그냥 여러번 보고 외워버리는게 나은듯!
import java.util.*;
class Solution {
public int solution(int[] arr) {
/**
* 1. arr로 제공되는 수들의 공배수중 최소 공배수를 구해라
* 2. 최소공배수를 구하는 함수를 계속 돌리면 되지 않을까?...
* 3. 사실상 for문으로 O(n)이긴 한데... 흠.. 일단 한번 해보자.
* 4. 그런데 최소공배수를 어떻게 구하더라?...
* 5. 이것도 재귀함수로 배울수 있을까?..
*/
int answer = 0;
int lcd = this.getLCM(arr[0],arr[1]);
for(int i=1; i< arr.length-1; i++){
lcd = this.getLCM(lcd,arr[i+1]);
}
answer = lcd;
return answer;
}
/**
* 최소공배수를 구하자!
* @param num1
* @param num2
* @return
*/
public int getLCM(int num1, int num2){
int lcd = 0;
int max = Math.max(num1,num2);
int min = Math.min(num1,num2);
if(max%min==0){
return max;
}
lcd = num1*num2/this.getGCD(num1,num2);
return lcd;
}
public int getGCD(int num1, int num2){
while(num2!=0){
int r = num1%num2;
num1= num2;
num2= r;
}
return num1;
}
}
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스[12949] - 행렬의 곱셈(lv2) (0) | 2022.11.09 |
---|---|
프로그래머스[12980] - 점프와 순간이동(lv2) (0) | 2022.10.04 |
프로그래머스[87946] - 피로도(lv2) - 미완 (0) | 2022.09.28 |
프로그래머스[12981] - 영어 끝말잇기(lv2) (0) | 2022.09.26 |
프로그래머스[12945] - 피보나치 수열(lv2) (0) | 2022.09.19 |