본문 바로가기
프로그래머스/JAVA

[level 2] N개의 최소공배수

by AsCE_hyunseung 2018. 9. 13.

-LeastCommonMultiple.java

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
public class LeastCommonMultiple {
    public int solution(int[] arr) {
        int answer=lcm(arr[0],arr[1]);
        //1.최소 공배수, 최대 공약수를 구하는 함수를 구현한다.
        //2.첫번째 원소와 두번째 원소의 최소 공배수를 구한다.
 
        for(int i=2;i<arr.length;i++)
        {
            //3.그 최소 공배수를 가지고 그 다음 원소와의 최소 공배수를 구한다.
            //4.마지막 배열의 원소까지 이 2번과정을 반복한다.
            answer=lcm(answer,arr[i]);
        }
        return answer;
    }
 
    public int gcd(int a, int b) {//최대 공약수 구하는 함수
        while (b != 0) {
            int Temp = a % b;
            a = b;
            b = Temp;
        }
        return a;
    }
    public int lcm(int a, int b) {//최소 공배수 구하는 함수
        return (int) a * b / gcd(a,b);
    }
}
 
cs


-LeastCommonMultipleTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package qwer;
 
import org.junit.Test;
 
import static org.junit.Assert.*;
 
 
public class LeastCommonMultipleTest {
    LeastCommonMultiple L=new LeastCommonMultiple();
    int []arr1={2,6,8,14};
    int []arr2={1,2,3};
 
    @Test
    public void 테스트결과(){
        assertEquals(168,L.solution(arr1));
        assertEquals(6,L.solution(arr2));
    }
 
}
cs


-문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.


-제한 사항

arr은 길이 1이상, 15이하인 배열입니다.

arr의 원소는 100 이하인 자연수입니다.


배열의 앞의 두 숫자의 최소공배수를 구한 다음 그 수로 다음 원소와의 최소공배수를 계속 구해주면 해결되는 문제였다.

의사코드를 먼저 구현한 뒤에 코드를 작성해서 편하게 풀었다.

처음으로 혼자 힘으로 TDD방법론을 사용해서 푼 문제라 뿌듯하다.

'프로그래머스 > JAVA' 카테고리의 다른 글

[level 2] 숫자의 표현  (0) 2018.09.26
[정렬] K번째수  (0) 2018.09.21
[level 2] 행렬의 곱셈  (0) 2018.09.11
[level 2] 다음 큰 숫자  (0) 2018.09.10
[level 1] 핸드폰 번호 가리기  (0) 2018.09.06