https://school.programmers.co.kr/learn/courses/30/lessons/118667
๋ฌธ์
- ๊ธธ์ด๊ฐ ๊ฐ์ ๋ ๊ฐ์ ํ๊ฐ ์ฃผ์ด์ง๋ค.
- ํ๋์ ํ๋ฅผ ๊ณจ๋ผ ์์๋ฅผ ์ถ์ถ(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;
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ๊ทค ๊ณ ๋ฅด๊ธฐ (0) | 2023.11.10 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ์กฐ์ด์คํฑ (0) | 2023.10.24 |
ํ๋ก๊ทธ๋๋จธ์ค - ๊ฐ์ฅ ํฐ ์ (0) | 2023.09.07 |
ํ๋ก๊ทธ๋๋จธ์ค - ์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ (0) | 2023.08.30 |
ํ๋ก๊ทธ๋๋จธ์ค - ์์ดํ ์ค๊ธฐ (0) | 2023.08.21 |