프로그래머스

[프로그래머스 C++] 최대공약수와 최소공배수

민봉이 2022. 10. 17. 23:36
반응형

링크

https://school.programmers.co.kr/learn/courses/30/lessons/12940

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명 및 제한 조건

나의 코드

#include <string>
#include <vector>

using namespace std;

vector<int> solution(int n, int m) 
{
    vector<int> answer;
    
    int nTemp = n;
    int mTemp = m;

    int max = 1;        //최대공약수
    int min = 1;        //최소공배수
    int temp = 0;

    while (m != 0)     //유클리드 호제법
    {
        temp = n % m;
        n = m;
        m = temp;
        max = n;
    }

    answer.push_back(max);
    n = nTemp;
    m = mTemp;

    min = (n * m) / max;   //최소공배수는 최대공약수를 사용
    answer.push_back(min);

    return answer;
}

채점 결과

다수 코드

재귀함수 이용

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
#include<vector>
#include<iostream>
using namespace std;


int Euclidean(int a, int b)
{
    return b ? Euclidean(b, a%b) : a;
}

vector<int> gcdlcm(int a,int b)
{
    vector<int> answer;
    // 유클리드 호제법
  answer.push_back(Euclidean(a,b));

  answer.push_back(a*b / answer[0]);

    return answer;
}

int main()
{
    int a=3, b=12;
    vector<int> testAnswer = gcdlcm(a,b);

    cout<<testAnswer[0]<<" "<<testAnswer[1];
}

 

신기한 코드

// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
#include<vector>
#include<iostream>
using namespace std;

vector<int> gcdlcm(int a,int b)
{ 
  int temp = a;

  if(a > b){
    a = b;
    b = temp;
  }

    vector<int> answer;

    for(int i = a; i > 0; i--){
    if(((a%i) == 0) && ((b%i) == 0)){
      answer.push_back(i);
      answer.push_back((a*b)/i);
      break;
    }
  }
    return answer;
}

int main()
{
    int a=3, b=12;
    vector<int> testAnswer = gcdlcm(a,b);

    cout<<testAnswer[0]<<" "<<testAnswer[1];
}
반응형