티스토리 뷰

#include <string>
#include <vector>
#include <numeric>

using namespace std;

int solution(vector<int> arrayA, vector<int> arrayB) {
    int answer = 0;

    int Anum = accumulate(arrayA.begin(), arrayA.end(), 0, gcd<int, int>);
    int Bnum = accumulate(arrayB.begin(), arrayB.end(), 0, gcd<int, int>);

    answer = max(Anum, Bnum);

    if(answer == Anum) 
    {
        for(auto i : arrayB) 
        {
            if(i % answer == 0) return 0;
        }
    } 
    else 
    {
        for(auto i : arrayA) 
        {
            if(i % answer == 0) return 0;
        }
    }

    return answer;
}

 

문제 내용을 순차적으로 풀어나가면 되는 문제이다.

먼저 1, 2번 조건을 위해 각 벡터 값에 따른 최대 공약수를 구해준다.

이후 가장 큰 양의 정수 A를 찾기 위해 큰 더 큰 값을 우선 answer에 저장한다.

 

이제 해당 answer의 값이 2가지 벡터에 대해 모두 나누는 경우가 있는 지 체크해야 한다.

만약 answer의 값이 Anum과 같다면 arrayB에 대해 나눠지는 케이스가 있는 지 체크하고,

만약 answer의 값이 Bnum과 같다면 arrayA에 대해 나눠지는 케이스가 있는 지 체크한다.

앞서 answer 값 자체는 이미 구했기에, 만약 나눠지는 케이스가 존재하면 바로 0을 반환해주고 없다면 그대로 answer을 반환하게 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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 29 30 31
글 보관함