[알고리즘 ]최대공약수와 최소공배수

윤재열·2022년 3월 24일
0

algorithm

목록 보기
9/18

문제 및 풀이

문제 설명

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

제한조건

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

입출력 예

nmreturn
312[3, 12]
25[1, 10]

입출력 예 설명

  • 입출력 예 #1
    위의 설명과 같습니다.

  • 입출력 예 #2
    자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다.

문제 풀이

class Solution {
    public int[] solution(int n, int m) {
        int[] answer = new int[2];
        int val1 = 0;
        int val2 = 0;
        int r = 1;
        if(n>m){
            val1 = n;
            val2 = m;
        } else {
            val1 = m;
            val2 = n;
        }
        
        while(r > 0) {
            r = val1 % val2;
            val1 = val2;
            val2 = r;
        }
        answer[0] = val1;
        answer[1] = m * n/answer[0];
        return answer;
    }
}

알고리즘 풀이 :

  1. 반환할 int[] 타입의 변수 answer의 크기를 2로 선언

  2. val1과 val2를 0으로 초기화하여 int 타입으로 선언

  3. r을 1으로 초기화하여 int 타입으로 선언

  4. if 문을 사용하여 n보다 m이 크면 val1에 n을 val2에 m을 대입

  5. n보다 m이 작거나 같을 경우 val1에 m을 val2에 n을 대입

  6. r이 0보다 클 때까지만 while문을 반복

  7. r에 val1 % val2 한 값을 저장하고 val1에는 val2를 val2에는 r을 저장하는 과정을 반복

  8. answer[0](최대공약수)에 val1을 저장하고 answer[1](최소공배수)에는 m*n/answer[0]을 저장

  • 최소 공배수 구하는 방법 : n * m / 최대공약수
  1. return을 사용하여 answer을 반환
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/

0개의 댓글

관련 채용 정보