프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 방법

1. 각 큐의 합을 구한다

2. 각 큐의 합을 더했을 때 값이 홀수라면 두 큐의 값을 같게 만들 수 없으므로 -1을 리턴

3. 큐의 사이즈를 qSize 변수에 담고 while문의 조건에 이동 횟수가 qSized * 4를 넘어가지 않도록 한다

4. 각 큐의 합이 같다면 count를 리턴하고 그렇지 않다면 각각 pop과 insert를 수행해준다.

5. 만약 while문이 끝날 때까지 각 큐의 합이 같아지지 않았다면 -1을 리턴

 

#include <string>
#include <vector>

using namespace std;

long count, sum1, sum2, goal, idx1, idx2;

int solution(vector<int> queue1, vector<int> queue2) {
    for(int i = 0; i < queue1.size(); i++)
        sum1 += queue1[i];
    
    for(int j = 0; j < queue2.size(); j++)
        sum2 += queue2[j];
    
    goal = sum1 + sum2;
    
    if(goal % 2 == 1)
        return -1;
    
    int qSize = queue1.size();
    
    while(count < qSize * 3) {
        if(sum1 == sum2) return count;
        else if(sum1 < sum2) {
            queue1.push_back(queue2[idx2]);
            sum1 += queue2[idx2];
            sum2 -= queue2[idx2];
            queue2[idx2++] = 0;
        }
        else {
            queue2.push_back(queue1[idx1]);
            sum1 -= queue1[idx1];
            sum2 += queue1[idx1];
            queue1[idx1++] = 0;
        }
        count++;
    }
    
    return -1;
}

 

+ Recent posts