프로그래머스

프로그래머스 숫자 카드 나누기

콩순이냉장고 2022. 12. 19. 18:37

문제 URL : https://school.programmers.co.kr/learn/courses/30/lessons/135807

 

프로그래머스

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

programmers.co.kr

문제 접근법 :  쉽게설명하면  arrayA의 최대공약수를 a라고하고  arrayB의최대공약수를 b라고할때

a로 arrayB하나라도 나눠지는지

반대로 b로 arrayA가 하나라도 나눠지는지 확인한후 나눠지는게 없다면

a,b값중 최대값을 리턴하면 되는문제이기때문에 어렵지 않은 문제입니다. 

 

#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}
int getGcd(vector<int>& v) {
    int g = v[0];
    for (int i : v)g = gcd(g, i);
    return g;
}
int getMax(vector<int>& v,int g) {
    for (int i : v)if (i % g == 0)return 0;
    return g;
}
int solution(vector<int> arrayA, vector<int> arrayB) {
    int g1 = getGcd(arrayA);
    int g2 = getGcd(arrayB);
    return max(getMax(arrayA,g2),getMax(arrayB,g1));
}

궁금한점 혹은 모르는점 어떤 질문이든댓글은 언제나 환영입니다.