자기개발/코딩테스트
C++ (코딩테스트) - 숫자 카드 나누기(프로그래머스)
pi92
2022. 12. 29. 14:50
문제
https://school.programmers.co.kr/learn/courses/30/lessons/135807
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내가 쓴 코드
#include <string>
#include <vector>
using namespace std;
vector<int> factor(int a) {
vector<int> vec_fac(0);
if (a <= 0) return vec_fac;
for (int i = 2; i <= a / 2; i++) {
if (a % i == 0) { vec_fac.push_back(i); }
}
vec_fac.push_back(a);
return vec_fac;
}
int GetMinValue(vector<int> arr)
{
int min_value = 100000000;
for (int i = 0; i < arr.size(); i++)
{
if (min_value > arr[i]) min_value = arr[i];
}
return min_value;
}
vector<int> GetMaxInt(vector<int> src, vector<int> cmp)
{
vector<int> res(0);
int temp;
for (int i = src.size() - 1; i >= 0; i--)
{
temp = src[i];
for (int j = 0; j < cmp.size(); j++)
{
if (cmp[j] % temp == 0)
{
temp = 0;
break;
}
}
if (temp == 0) continue;
res.push_back(temp);
}
return res;
}
int ResultMaxInt(vector<int> MaxInt, vector<int> vec_arr1, vector<int> vec_arr2)
{
if (MaxInt.size() == 0) return 0;
int res;
for (int j = 0; j < MaxInt.size(); j++)
{
res = MaxInt[j];
for (int i = 0; i < vec_arr1.size(); i++)
{
if (vec_arr1[i] % res != 0)
{
res = 0;
break;
}
}
for (int i = 0; i < vec_arr2.size(); i++)
{
if(res == 0) break;
if (vec_arr2[i] % res == 0)
{
res = 0;
break;
}
}
if(res != 0) break;
}
return res;
}
int solution(vector<int> arrayA, vector<int> arrayB) {
int answer = 0;
int minA, minB, resA, resB;
vector<int> factorA(0), factorB(0);
minA = GetMinValue(arrayA);
minB = GetMinValue(arrayB);
factorA = factor(minA);
factorB = factor(minB);
resA = ResultMaxInt(GetMaxInt(factorA, factorB), arrayA, arrayB);
resB = ResultMaxInt(GetMaxInt(factorB, factorA), arrayB, arrayA);
return (resA > resB)? resA : resB;
}
베스트 코드
#include <bits/stdc++.h>
using namespace std;
int f(int a, int b){return a % b == 0 ? b : f(b, a % b);}
int f(vector<int> &a, vector<int> &b){
int A = a[0];
for (int x : a) A = f(max(A, x), min(A, x));
for (int x : b)
if (x % A == 0)
return 0;
return A;
}
int solution(vector<int> a, vector<int> b) {
return max(f(a, b), f(b, a));
}
현타..