프로그래머스 문제 - 두 큐 합 같게 만들기

JUNWOO KIM·2024년 2월 5일
0

알고리즘 풀이

목록 보기
80/105

프로그래머스 두 큐 합 같게 만들기 문제 풀이를 진행하였습니다.

문제 해석

문제를 읽으면 아래와 같은 해석이 가능합니다.

길이가 같은 두 개의 큐가 주어집니다.
하나의 큐를 골라 원소를 추출(pop)하고, 추출된 원소를 다른 큐에 집어넣는(insert) 작업을 통해 각 큐의 원소 합이 같도록 만들려고 합니다.
이때 필요한 작업의 최소 횟수를 구하고자 합니다.
한 번의 pop과 한 번의 insert를 합쳐서 작업을 1회 수행한 것으로 간주합니다.

문제 풀이

두개의 큐와 누적합을 사용해주면 쉽게 값을 찾아낼 수 있습니다.
둘 중 누적합이 큰 쪽의 큐값을 push pop 해준 후 합이 같아지는지 확인해주면 됩니다.
모든 경우의 수를 탐색하기 위해서 queue길이의 4배만큼 값을 탐색해주었습니다.

전체 코드

#include <bits/stdc++.h>
#include <string>
#include <vector>

using namespace std;

int solution(vector<int> queue1, vector<int> queue2) {
    int answer = -1;
    long long q1sum = 0;
    long long q2sum = 0;
    queue<int> q1;
    queue<int> q2;
    
    //각각의 queue에 값 저장 및 각 큐의 누적합을 더해줌
    for(int n : queue1){
        q1sum += n;
        q1.push(n);
    }
    for(int n : queue2){
        q2sum += n;
        q2.push(n);
    }
    //queue1.size()의 4배만큼 값을 검색
    for(int i = 0; i < (queue1.size() << 2); i++)
    {
        if(q1sum < q2sum){
            int curNum = q2.front(); q2.pop();
            q1sum += curNum;
            q2sum -= curNum;
            q1.push(curNum);
        }else if(q1sum > q2sum){
            int curNum = q1.front(); q1.pop();
            q2sum += curNum;
            q1sum -= curNum;
            q2.push(curNum);
        }else{
            return ++answer;
        }
        answer++;
    }
    
    return -1;
}

출저

https://school.programmers.co.kr/learn/courses/30/lessons/118667

profile
게임 프로그래머 준비생

0개의 댓글