PS 문제풀이

[C++] 2942 - 피거슨과 사과

희디 2023. 6. 5. 12:29

#include <iostream>
#include <stack>
using namespace std; 

long long int gcd(long long int a, long long int b){
    // b가 0일때까지 나누기 
    
    if (b==0){
        return a;
    }
    
    else {
        return gcd(b, a%b);
    }
}
int main(){
    long long int R, G, res, n_ppl, r_num, g_num;
    cin >> R >> G;
    
    res = gcd(R, G);
    
    for (int k=1; k<res+1; k++){
        if (res%k==0){
            n_ppl = k;
            r_num = R/k;
            g_num = G/k;
            cout << n_ppl << " " << r_num << " " <<g_num<<"\n";
        }
    }
    
    
    return 0;
}

사람 수는 사과의 약수들로 나오고 이에 따라 사과를 분배하는 것을 확인할 수 있음. 그래서 최대공약수를 구해야함을 느끼고 이에 관련된 알고리즘 유클리드 호제법 적용하기. int gcd(long long int a, long long int b) 확인

 

 

아래 링크를 참고하자. 이 문제를 푸는데 꼭 필요한 개념!!

(하지만 아직 미완성..)

https://daywnme.tistory.com/323