[νλ‘κ·Έλλ¨Έμ€/LV.2] λ ν ν© κ°κ² λ§λ€κΈ°(JavaScript)
https://school.programmers.co.kr/learn/courses/30/lessons/118667
λ¬Έμ μ€λͺ
κΈΈμ΄κ° κ°μ λ κ°μ νκ° μ£Όμ΄μ§λλ€. νλμ νλ₯Ό κ³¨λΌ μμλ₯Ό μΆμΆ(pop)νκ³ , μΆμΆλ μμλ₯Ό λ€λ₯Έ νμ μ§μ΄λ£λ(insert) μμ μ ν΅ν΄ κ° νμ μμ ν©μ΄ κ°λλ‘ λ§λ€λ €κ³ ν©λλ€. μ΄λ νμν μμ μ μ΅μ νμλ₯Ό ꡬνκ³ μ ν©λλ€. ν λ²μ popκ³Ό ν λ²μ insertλ₯Ό ν©μ³μ μμ μ 1ν μνν κ²μΌλ‘ κ°μ£Όν©λλ€.
νλ λ¨Όμ μ§μ΄λ£μ μμκ° λ¨Όμ λμ€λ ꡬ쑰μ λλ€. μ΄ λ¬Έμ μμλ νλ₯Ό λ°°μ΄λ‘ νννλ©°, μμκ° λ°°μ΄ μμͺ½μ μμμλ‘ λ¨Όμ μ§μ΄λ£μ μμμμ μλ―Έν©λλ€. μ¦, popμ νλ©΄ λ°°μ΄μ 첫 λ²μ§Έ μμκ° μΆμΆλλ©°, insertλ₯Ό νλ©΄ λ°°μ΄μ λμ μμκ° μΆκ°λ©λλ€. μλ₯Ό λ€μ΄ ν [1, 2, 3, 4]κ° μ£Όμ΄μ‘μ λ, popμ νλ©΄ 맨 μμ μλ μμ 1μ΄ μΆμΆλμ΄ [2, 3, 4]κ° λλ©°, μ΄μ΄μ 5λ₯Ό insertνλ©΄ [2, 3, 4, 5]κ° λ©λλ€.
λ€μμ λ νλ₯Ό λνλ΄λ μμμ λλ€.
queue1 = [3, 2, 7, 2] queue2 = [4, 6, 5, 1]β
λ νμ λ΄κΈ΄ λͺ¨λ μμμ ν©μ 30μ λλ€. λ°λΌμ, κ° νμ ν©μ 15λ‘ λ§λ€μ΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ 2κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
1. queue2μ 4, 6, 5λ₯Ό μμλλ‘ μΆμΆνμ¬ queue1μ μΆκ°ν λ€, queue1μ 3, 2, 7, 2λ₯Ό μμλλ‘ μΆμΆνμ¬ queue2μ μΆκ°ν©λλ€. κ·Έ κ²°κ³Ό queue1μ [4, 6, 5], queue2λ [1, 3, 2, 7, 2]κ° λλ©°, κ° νμ μμ ν©μ 15λ‘ κ°μ΅λλ€. μ΄ λ°©λ²μ μμ μ 7λ² μνν©λλ€.
2. queue1μμ 3μ μΆμΆνμ¬ queue2μ μΆκ°ν©λλ€. κ·Έλ¦¬κ³ queue2μμ 4λ₯Ό μΆμΆνμ¬ queue1μ μΆκ°ν©λλ€. κ·Έ κ²°κ³Ό queue1μ [2, 7, 2, 4], queue2λ [6, 5, 1, 3]κ° λλ©°, κ° νμ μμ ν©μ 15λ‘ κ°μ΅λλ€. μ΄ λ°©λ²μ μμ μ 2λ²λ§ μννλ©°, μ΄λ³΄λ€ μ μ νμλ‘ λͺ©νλ₯Ό λ¬μ±ν μ μμ΅λλ€.
λ°λΌμ κ° νμ μμ ν©μ κ°κ² λ§λ€κΈ° μν΄ νμν μμ μ μ΅μ νμλ 2μ λλ€.
κΈΈμ΄κ° κ°μ λ κ°μ νλ₯Ό λνλ΄λ μ μ λ°°μ΄ queue1, queue2κ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. κ° νμ μμ ν©μ κ°κ² λ§λ€κΈ° μν΄ νμν μμ μ μ΅μ νμλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ. λ¨, μ΄λ€ λ°©λ²μΌλ‘λ κ° νμ μμ ν©μ κ°κ² λ§λ€ μ μλ κ²½μ°, -1μ return ν΄μ£ΌμΈμ.
μ ν μ¬ν
- 1 ≤ queue1μ κΈΈμ΄ = queue2μ κΈΈμ΄ ≤ 300,000
- 1 ≤ queue1μ μμ, queue2μ μμ ≤ 109
- μ£Όμ: μΈμ΄μ λ°λΌ ν© κ³μ° κ³Όμ μ€ μ°μ μ€λ²νλ‘μ° λ°μ κ°λ₯μ±μ΄ μμΌλ―λ‘ long type κ³ λ €κ° νμν©λλ€.
μ μΆλ ₯ μ
queue1 | queue2 | result |
[3, 2, 7, 2] | [4, 6, 5, 1] | 2 |
[1, 2, 1, 2] | [1, 10, 1, 2] | 7 |
[1, 1] | [1, 5] | -1 |
μ μΆλ ₯ μ μ€λͺ
μ μΆλ ₯ μ #1
λ¬Έμ μμμ κ°μ΅λλ€.
μ μΆλ ₯ μ #2
λ νμ λ΄κΈ΄ λͺ¨λ μμμ ν©μ 20μ λλ€. λ°λΌμ, κ° νμ ν©μ 10μΌλ‘ λ§λ€μ΄μΌ ν©λλ€. queue2μμ 1, 10μ μμλλ‘ μΆμΆνμ¬ queue1μ μΆκ°νκ³ , queue1μμ 1, 2, 1, 2μ 1(queue2μΌλ‘λΆν° λ°μ μμ)μ μμλλ‘ μΆμΆνμ¬ queue2μ μΆκ°ν©λλ€. κ·Έ κ²°κ³Ό queue1μ [10], queue2λ [1, 2, 1, 2, 1, 2, 1]κ° λλ©°, κ° νμ μμ ν©μ 10μΌλ‘ κ°μ΅λλ€. μ΄λ μμ νμλ 7νμ΄λ©°, μ΄λ³΄λ€ μ μ νμλ‘ λͺ©νλ₯Ό λ¬μ±νλ λ°©λ²μ μμ΅λλ€. λ°λΌμ 7λ₯Ό return ν©λλ€.
μ μΆλ ₯ μ #3
μ΄λ€ λ°©λ²μ μ°λλΌλ κ° νμ μμ ν©μ κ°κ² λ§λ€ μ μμ΅λλ€. λ°λΌμ -1μ return ν©λλ€.
μ λ΅ μ½λ
function solution(queue1, queue2) {
//μ΄ λΉΌκ³ λ£κ³ μ κΈ°μ€μ μ΄λ»κ² μΈμΈκΉ?
//λ§ μ λ€κ° λΉΌμΌλλ μ¦, ν©μ΄ λ ν° νμμ popλ₯Ό νλ©΄ λκ² λ€λ μκ°μ νλ€!
//κ·Έλ¦¬κ³ queueμ κΈΈμ΄κ° μ΅λ μΌμλ§μ΄κΈ° λλ¬Έμ μκ°μ΄κ³Όκ° 무쑰건 λ κ² κ°λ€!
//κ·Έλμ shift()λ₯Ό μ°μ§λ§κ³ μΈλ±μ€λ₯Ό μ¬μ©ν΄μΌνλ€.
let count = 0; //μμ
νμ
const totalLength = queue1.length + queue2.length; //μ’
λ£μ‘°κ±΄μ μν΄ μ΅μ’
κΈΈμ΄λ₯Ό ꡬν΄μ€λ€.
let queue1Idx = 0; //맨 μμμλΆν° λΉΌμΌνλκΉ
let queue2Idx = 0;
let queue1Sum = queue1.reduce((a,b) => a+b,0);
let queue2Sum = queue2.reduce((a,b) => a+b,0);
while(queue1Sum !== queue2Sum){
//κ°μ λκΉμ§ λλ €μΌνλ€.
if(queue1Sum > queue2Sum){
//1νκ° λ ν¬λ©΄ 1νμμ λΉΌμ 2νλ‘
queue1Sum -= queue1[queue1Idx];
queue2.push(queue1[queue1Idx]);
queue2Sum += queue1[queue1Idx]; //pushλλ€κ³ μλμΌλ‘ λ€μ sumμ ꡬνλκ² μλκΈ°λλ¬Έμ μ§μ λν΄μ€λ€.
queue1Idx++; //κ·Έλ¦¬κ³ μΈλ±μ€ μ¦κ°
}else if(queue1Sum < queue2Sum){
//2νκ° λ ν¬λ©΄ 2νμμ λΉΌμ 1νλ‘
queue2Sum -= queue2[queue2Idx];
queue1.push(queue2[queue2Idx]);
queue1Sum += queue2[queue2Idx];
queue2Idx++;
}
count++; //μΉ΄μ΄νΈ μ¬λ €μ£Όλ건 곡ν΅μ΄λκΉ λ°μΌλ‘
if(queue1Idx > totalLength || queue2Idx > totalLength){
//μΈλ±μ€κ° ν νλ³΄λ€ ν¬λ©΄ νλ₯Ό λ€ λκ±°κ² μ£ ?
return -1;
}
}
return count;
}