๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ (queue - L2) ๋ณธ๋ฌธ

CS/๋ฐฑ์ค€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ (queue - L2)

๊ฐ•์˜์„œ 2023. 11. 21. 15:15

 

๐Ÿ“Œ ๋ฌธ์ œ

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•˜๊ณ  ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€๋Š” ๋„ˆ๋ฌด ๋ช…ํ™•ํ•ด์„œ ๊ตฌํ˜„๊นŒ์ง€๋Š” ๊ธˆ๋ฐฉ ํ–ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋„ ํ•œ ์›์†Œ์˜ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— long long ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋งŒ ์กฐ์‹ฌํ•˜๋ฉด ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š”...

๋„๋Œ€์ฒด ์ฒซ๋ฒˆ์งธ ํ…Œ์ŠคํŠธ1๊ฐ€ ์™œ ํ†ต๊ณผ๋˜์ง€ ์•Š๋Š”๊ฒƒ์ผ๊นŒ.... ๊ณ„์† ๊ณ ๋ฏผ์„ ํ•ด๋ณด์•˜๋‹ค...

๊ตฌ๊ธ€๋ง ํ•ด๋ณด๊ณ  ๋‹ค๋ฅธ ๋ถ„๋“ค ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•ด ๋ณธ ๊ฒฐ๊ณผ ์ด์œ ๋Š” ๋ฐ˜๋ณต๋ฌธ์ด ์ž‘์—…์„ ๊ณ„์†ํ•˜๋Š” ๊ธฐ์ค€์„ 

ํ์˜ ํฌ๊ธฐ * 2 ์ด์ƒ์„ ๋Œ๋ฉด ์›๋ž˜ ํ๋กœ ๋Œ์•„์™”๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ์˜ ํฌ๊ธฐ * 4 ๋งŒํผ ํƒ์ƒ‰์„ ํ•ด์•ผํ•จ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

์™œ๋ƒํ–๋ฉด ํ๊ฐ€ ํ•‘ํ์ฒ˜๋Ÿผ ์ฃผ๊ณ  ๋ฐ›๊ณ ๋ฅผ ๊ณ„์† ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ํ๊ฐ€ ์›๋ž˜ ์ƒํƒœ๋กœ ๋Œ์•„์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ์˜ ํฌ๊ธฐ * 2 * 2 ๋งŒํผ ๋ฐ˜๋ณตํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์ด๋‹ค...!

 

์•„์ง๋„ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋ฅด๊ฒ ๊ณ  ๋‚˜๋Š” ๊ณต๋ถ€๋ฅผ ๋งŽ์ด ํ•ด์•ผ๊ฒ ๊ตฌ๋‚˜ ๋Š๊ผˆ๋‹ค...!

 

๐Ÿ’ป ์ •๋‹ต ์ฝ”๋“œ

#include <string>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

int solution(vector<int> q1, vector<int> q2) {
    
    //ํ .... ์—ฃ์ง€ ์ผ€์ด์Šค์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜๊ณ  ์žˆ๋Š”๋ฐ,,, ๋ญ์ง€?
    //๋ญ˜๊นŒ~~์š”
    
    long long sum1 = 0, sum2 = 0;
    int size = q1.size();
    queue<int> queue1, queue2;
    
    for(int i = 0; i < size; i++){      //ํ•ฉ์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
        sum1 += q1[i]; sum2 += q2[i];
        
        queue1.push(q1[i]); queue2.push(q2[i]);
    }
    
    int answer = 0;
    if((sum1 + sum2) % 2 == 1 ) return -1;
    if((sum1 != sum2) && (size == 1)) return -1;
    
    while(!(sum1 == sum2)){
        
        answer++; 
        if(answer >= size * 4 ){
            answer = -1;
            break;
        }
        
        if(sum1 < sum2){
            
            int temp = queue2.front(); //queue2์—์„œ ๋งจ ์•ž ๊ฐ’ pop ํ•˜๊ธฐ
            queue2.pop(); 
            sum2 -= temp;
            
            queue1.push(temp);          //queue1์— ํ•ด๋‹น ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ธฐ
            sum1 += temp;
        }
        
        else{
            int temp = queue1.front(); 
            queue1.pop(); 
            sum1 -= temp;
            
            queue2.push(temp); 
            sum2 += temp;
        }
    }

    return answer;
}