본문 바로가기
알고리즘/코딩 - 프로그래머스

[Java][프로그래머스][Level 1] 최대공약수와 최소공배수

by 주남2 2019. 4. 30.
반응형

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

제한 사항

  • 두 수는 1이상 1000000이하의 자연수입니다.

생각

최대공약수와 최소공배수에 대한 설명은 예시 하나를 들며 설명하겠다. 4 18이라는 숫자를 생각해보자. 4와 18의 공통 약수중 가장 큰 것이 최대공약수가 될 것이고, 이는 직관적으로 2가 나올 것이다. (중1 과정이기 때문에 대부분 바로 하실 것이라 믿는다!)

 

그리고 최소공배수는 36이 나온다. 최소공배수가 나오는 과정에 대해 살펴보면 가장 쉬운 방법으로는 4와 18의 배수를 생각해보면 되지만, 코딩을 해야 하기 때문에 규칙을 만들어야 한다. 내가 사용한 규칙은 두 수의 곱을 최대공약수로 나누면 된다. (4 * 18) / 2 = 72 / 2 = 36이 잘 나오게 된다.

 

두 수 m과 n을 정의한다. 후에 m과 n중 큰 수를 고르기 위해  m이 더 큰 값을 가지게 만든다. 빠른 계산을 위해 n의 m의 약수일 경우를 미리 설정하고, 후에 for문을 거치면서 동시에 나눠지는 경우를 찾고, 최대공약수와 최소공배수를 정답 배열 안에 넣어준다.

 

코드

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
class Solution {
      public int[] solution(int n, int m) {
          
          int[] answer = new int[2];
          
          int temp;
          
          if(m<n) {
              temp = n;
              n = m;
              m = temp;
          }
          
          if(m%n==0) {
              answer[0= n;
              answer[1= m;
          } else {
              for(int i=1; i<n; i++) {
                  if(n%i==0 && m%i==0) {
                      answer[0= i;
                      answer[1= (n*m)/i;
                  }
              }
          }
          
          return answer;
      }
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

드디어 시험이 끝나고 블로그에 글을 쓸 수 있게 되었다. 미리미리 공부해서 기말고사 시즌에는 그래도 글을 조금이라도 쓸 수 있으면 좋겠다..!

반응형