νλ‘κ·Έλλ¨Έμ€ - λ ν ν© κ°κ² λ§λ€κΈ°
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;
}
}
κ²°κ³Ό