ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 숫자 카드 나열 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
    반응형

    댓글

Designed by Tistory.