-
프로그래머스 숫자 카드 나열 c++알고리즘/프로그래머스 2022. 11. 27. 15:36반응형
#include <string> #include <vector> #include <algorithm> using namespace std; vector<int> addMeasure(int a,vector<int> array) { vector<int> rem; bool check = true; for(int i=2; i<=a; i++) { for(int j=0; j<array.size(); j++) { if(array[j] % i != 0) { check = false; break; } } if(check) { rem.push_back(i); } else { check = true; } } return rem; } bool checkMeasure(int a, vector<int> array) { for(int i=0; i<array.size(); i++) { if(array[i] % a == 0) { return false; } } return true; } int calculateResult(vector<int> measure,vector<int> array) { int result = -1; for(int i=measure.size()-1; i>=0; i--) { if(checkMeasure(measure[i],array)) { result = measure[i]; break; } } return result; } int solution(vector<int> arrayA, vector<int> arrayB) { int answer = 0; int minAvalue = 999999999; int minBvalue = 999999999; for(int i=0; i<arrayA.size(); i++) { if(minAvalue > arrayA[i]) {minAvalue = arrayA[i];} if(minBvalue > arrayB[i]) {minBvalue = arrayB[i];} } vector<int> measureA = addMeasure(minAvalue,arrayA); vector<int> measureB = addMeasure(minBvalue,arrayB); int resultA = calculateResult(measureA,arrayB); int resultB = calculateResult(measureB,arrayA); if(resultA == -1 && resultB == -1) { answer = 0; } else { answer = max(resultA,resultB); } return answer; }
**
공약수가 되려면 숫자 배열의 최솟값보다 작거나 같아야한다.
**
프로그램 흐름
1. 철수의 공약수를 구한다.
2. 철수의 공약수를 크기가 큰 순서대로 영희에게 대입해 조건과 일치할 경우 resultA 에 저장
3. 영희도 1,2번 반복
4. resultA 와 B가 모두 -1 일 경우는 둘다 조건에 일치하는 경우가 없으므로 answer = 0,
하나라도 -1 이 아닐경우 둘중 최대값을 구해 answer에 저장
728x90반응형'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 우박수열 정적분 c++ (0) 2022.11.29 프로그래머스 혼자 놀기의 달인 c++ (0) 2022.11.27 프로그래머스 귤 고르기 c++ (2) 2022.11.26 프로그래머스 롤케이크자르기 c++ (0) 2022.11.08 프로그래머스 택배상자 c++ (0) 2022.10.14