티스토리 뷰
#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을 반환하게 된다.
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스 2레벨] 메뉴 리뉴얼 (C++) (0) | 2025.02.26 |
---|---|
[프로그래머스 2레벨] 미로 탈출 (C++) (0) | 2025.02.23 |
[프로그래머스 2레벨] 124나라의 숫자 (C++) (0) | 2025.02.18 |
[프로그래머스 2레벨] 호텔 대실 (C++) (0) | 2025.02.17 |
[프로그래머스 2레벨] 시소 짝꿍 (C++) (0) | 2025.02.15 |