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

 

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

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

programmers.co.kr

 

 

 

 

 

๋ฌธ์ œ

  • ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ํ•˜๋‚˜์˜ ํ๋ฅผ ๊ณจ๋ผ ์›์†Œ๋ฅผ ์ถ”์ถœ(pop)ํ•˜๊ณ , ์ถ”์ถœ๋œ ์›์†Œ๋ฅผ ๋‹ค๋ฅธ ํ์— ์ง‘์–ด๋„ฃ๋Š”(insert) ์ž‘์—…์„ ํ†ตํ•ด ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์ด ๊ฐ™๋„๋ก ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.
  • ์ด๋•Œ ํ•„์š”ํ•œ ์ž‘์—…์˜ ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ
    • ํ•œ ๋ฒˆ์˜ pop๊ณผ ํ•œ ๋ฒˆ์˜ insert๋ฅผ ํ•ฉ์ณ์„œ ์ž‘์—…์„ 1ํšŒ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ
    • ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์„ ๊ฐ™๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, -1์„ return

 

์ œํ•œ์‚ฌํ•ญ

  • ๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด queue1, queue2๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค.
  • 1 โ‰ค queue1์˜ ๊ธธ์ด = queue2์˜ ๊ธธ์ด โ‰ค 300,000
  • 1 โ‰ค queue1์˜ ์›์†Œ, queue2์˜ ์›์†Œ โ‰ค 10^9

 

 

 

 

 

ํ’€์ด

์ „์ฒด ๋กœ์ง

1. queue1๊ณผ queue2 ๊ฐ ํ์˜  ์›์†Œ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค.

2. ์›์†Œ ํ•ฉ์„ ๋น„๊ตํ•ด์„œ ํ•ฉ์ด ํฐ ํ์—์„œ ์›์†Œ๋ฅผ ๋นผ๊ณ , ํ•ฉ์ด ์ž‘์€ ํ์— ๋„ฃ๋Š”๋‹ค.

3. ๊ฐ™์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 

 

  • ์ž๋ฃŒ๊ตฌ์กฐ : Queue

 ๋ฌธ์ œ์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋‘ ๊ฐœ์˜ ํ๊ฐ€ ์ •์ˆ˜ ๋ฐฐ์—ด๋กœ ์ฃผ์–ด์ง€์ง€๋งŒ, ์›์†Œ๋ฅผ popํ•˜๊ณ  insertํ•˜๋Š” ์ž‘์—…์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ๋ฐฐ์—ด์— ์žˆ๋Š” ์›์†Œ๋“ค์„ ํ๋ฅผ ์ƒ์„ฑํ•ด ๋„ฃ์–ด์ค€๋‹ค.

 

 

  • ์›์†Œ ํ•ฉ ๊ตฌํ•˜๊ธฐ, ๊ฐฑ์‹ ํ•˜๊ธฐ

 ๋งค๋ฒˆ ํ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์›์†Œ์˜ ์ดํ•ฉ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ๋”ฐ๋กœ queue1๊ณผ queue2 ์˜ ์›์†Œ ํ•ฉ์„ ๋ณ€์ˆ˜๋กœ ๋‘์–ด ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. ๋ฌธ์ œ์˜ ์ œํ•œ ์‚ฌํ•ญ์„ ๋ณด๋ฉด 1 โ‰ค ์›์†Œ โ‰ค 10^9 ์ด๋ฏ€๋กœ, ์ด ํ•ฉ์ด int์˜ ๋ฒ”์œ„(์•ฝ 21์–ต)์„ ๋„˜์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ long์œผ๋กœ ์„ ์–ธํ•œ๋‹ค.

 

 

  • ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ํŒ๋‹จํ•˜๊ธฐ

1. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „๋ถ€ํ„ฐ ๊ฐ ํ์˜ ์›์†Œ ํ•ฉ์ด ๊ฐ™์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋‘ ํ์— ์žˆ๋Š” ์›์†Œ ํ•ฉ์ด ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ์—๋Š” ๋‚˜๋ˆ„๊ธฐ 2๋ฅผ ํ–ˆ์„ ๋•Œ ์ •์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

2. ์ผ์ • ํšŸ์ˆ˜๋ฅผ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. (์˜ˆ์‹œ 1)

 

์ฒ˜์Œ์— ๋‚˜๋ฆ„ ๊ทœ์น™์„ ์ฐพ์•„ ์ž‘์—… ํšŸ์ˆ˜๊ฐ€ queue1.length + queue2.length๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด -1์„ ๋ฆฌํ„ดํ•ด ์ข…๋ฃŒํ•˜๋„๋ก ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 30๊ฐœ์ค‘ 1๋ฒˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งŒ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

๋ฌธ์ œ ๋‚ด ์งˆ๋ฌธ ๊ฒŒ์‹œํŒ์„ ๋ณด๋‹ค๊ฐ€ ์ž‘์—… ํšŸ์ˆ˜๊ฐ€  queue1.length + queue2.length๋ฅผ ๋„˜์–ด๊ฐ€์„œ ๋‘ ํ์˜ ํ•ฉ์ด ๊ฐ™๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š” ๋ฐ˜๋ก€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. (์˜ˆ์‹œ 2) ๊ทธ๋ž˜์„œ ๋„‰๋„‰ํ•˜๊ฒŒ (queue1.length + queue2.length) * 2๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด -1์„ ๋ฆฌํ„ดํ•ด ์ข…๋ฃŒํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

์˜ˆ์‹œ1)

  • queue1 = [1, 1], queue2 = [1, 5]

โ†’  [1, 1, 1], [5] โ†’ [1, 1, 1, 5], [ ] โ†’ [1, 1, 5], [1] โ†’ [1, 5], [1, 1]

 

=> 4๋ฒˆ๋งŒ์— queue1๊ณผ queue2๊ฐ€ ๋ฐ”๋€Œ์–ด ๋Œ์•„์™€์„œ ๊ฒฐ๊ตญ ๋ฌดํ•œ๋ฃจํ”„๊ฐ€ ๋จ

 

 

์˜ˆ์‹œ2)

  • queue1 = [1, 1, 1, 1, 1, 1] , queue2 = [ 1, 1, 1, 1, 11, 1]

 

=> 15๋ฒˆ๋งŒ์— ๋‘ ํ์˜ ํ•ฉ์ด ๊ฐ™๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

 

 

์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        Queue<Integer> que1 = new LinkedList<>();
        Queue<Integer> que2 = new LinkedList<>();
        
        //ํ์— ์›์†Œ ๋„ฃ๊ธฐ
        long sum1 = 0; //1์˜ ์ดํ•ฉ
        for(int n : queue1) {
            que1.add(n);
            sum1 += n;
        }
        
        long sum2 = 0; //1์˜ ์ดํ•ฉ
        for(int n : queue2) {
            que2.add(n);
            sum2 += n;
        }
        
        //ํ•ฉ์ด ํ™€์ˆ˜๋ฉด ๋ถˆ๊ฐ€๋Šฅ
        if((sum1 + sum2) % 2 == 1) {
            return -1;
        }
        
        //๊ณ„์‚ฐ
        int length = (queue1.length + queue2.length) * 2; //๋‘ ํ์˜ ๊ธธ์ด ํ•ฉ
        
        int answer = 0;
        while(true) {
            //์ข…๋ฃŒ ์กฐ๊ฑด
            if(answer >= length) return -1; //๊ธธ์ด ๋„˜์–ด๊ฐ€๋ฉด ๋ถˆ๊ฐ€๋Šฅ
            if(sum1 == sum2) break; //๊ฐ ํ์˜ ์›์†Œ ํ•ฉ ๊ฐ™์Œ
            
            //ํ•ฉ ๋น„๊ต ํ›„, ํฐ ์ชฝ์—์„œ ๋นผ์„œ ์ž‘์€ ์ชฝ์—์„œ ๋„ฃ๊ธฐ
            if(sum1 > sum2) {
                int p = que1.poll();
                sum1 -= p;
                sum2 += p;
                que2.add(p);
            } else {
                int p = que2.poll();
                sum2 -= p;
                sum1 += p;
                que1.add(p);
            }
            
            answer++;
        }
        
        return answer;
    }
}

 

 

 

 

 

๊ฒฐ๊ณผ

 

 

 

 

 

๋ฐฐ์šด์ 

giraffe_