๋ฌธ์ ์์ฒด๋ ๊ฐ๋จํ๋ค.
์ผ์ชฝ ํ ์ดํฉ์ด ์ปค์ง๋ฉด, ์ผ์ชฝ ํ ์์๋ฅผ ๋นผ์ ์ค๋ฅธ์ชฝ ํ๋ก ์ฎ๊ธฐ๊ณ
์ค๋ฅธ์ชฝ ํ ์ดํฉ์ด ์ปค์ง๋ฉด ์ค๋ฅธ์ชฝ ํ ์์๋ฅผ ๋นผ์ ์ผ์ชฝ ํ๋ก ์ฎ๊ธฐ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ [1,4] [4,8] ๊ณผ ๊ฐ์ด ์ฃผ์ด์ง๋ฉด ๋ฌดํ ๋ฃจํ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์, while๋ฌธ ํ์ถ ์กฐ๊ฑด์ (๋ ํ์ ๊ธธ์ด ํฉ*2) ์ด์ ๋ฐ๋ณต๋๋ฉด ํ์ถํ๋๋ก ์ค์ ํด๋จ๋ค.
์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํด์ ์๊ฐํด๋ดค๋ค.
ํ1 [1 2 3....n] // ํ 2 [1 2 3 ....m]
ํ1 [n] // ํ 2[1 2 3 ...m 1 2 3....n-1] (์ฝ n-1๋ฒ ์์)
ํ1[1 2 3 ....m] // ํ2[1 2 3 ....n] (์ฝ m+1๋ฒ ์์)
ํ 1๊ณผ ํ2์ ์์๊ฐ ์์ ํ ๋ฐ๋๋ ค๋ฉด n+m๋ฒ์ด ์์๋๊ณ
๋ค์ ํ1์ด ์ฒ์ ํ1์์๋ก ๋์๊ฐ๋ ค๋ฉด n+m๋ฒ์ด ๋ ์์๋์ด ์ด 2(n+m)๋ฒ์ด ์์๋ ๊ฒ์ด๋ค.
ํ1๊ณผ ํ2 ๊ธธ์ด๋ ์ด๊ธฐ์ ๊ฐ์ ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ฏ๋ก 4*(n) ๋ฒ์ ํ์ถ ์กฐ๊ฑด์ผ๋ก ๋๋ฉด ๋๋ค.
ํ1์ด ๋๊ณ ๋์ ๋ค์ ํ1์์๋ก ๋์๊ฐ๋ค๋ ๋ป์ ๋ต์ด ์กด์ฌํ์ง ์๋ ๋ค๋ ๋ป์ผํ ๋ ํ์ถ ์กฐ๊ฑด์ผ๋ก ์ค์ ํ์๋ค.
import java.util.*;
class Solution {
Queue<Integer> left = new LinkedList<>();
Queue<Integer> right = new LinkedList<>();
long leftSum = 0;
long rightSum = 0;
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
setUp(queue1,queue2);
while(leftSum!=rightSum){
if(answer>4*(queue1.length)){
return -1;
}
if(leftSum>rightSum){
int move = left.poll();
right.offer(move);
leftSum-=move;
rightSum+=move;
}else if(leftSum<rightSum){
int move = right.poll();
left.offer(move);
leftSum+=move;
rightSum-=move;
}
answer++;
}
return answer;
}
void setUp(int[] queue1, int[] queue2){
for(int i=0;i<queue1.length;i++){
left.offer(queue1[i]);
leftSum+=queue1[i];
right.offer(queue2[i]);
rightSum+=queue2[i];
}
}
}