[JS]프로그래머스 - 두 큐 합 같게 만들기

Clear·2023년 4월 23일
0

출처

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

풀이

function solution(queue1, queue2) {
    var answer = 0;
    const sum1 = queue1.reduce((acc, curr)=>acc+curr, 0)
    const sum2 = queue2.reduce((acc, curr)=>acc+curr, 0)
    const half = (sum1+sum2)/2

    const list = [...queue1, ...queue2]
    let left = 0;
    let right = queue1.length-1;

    let sum = sum1
    while (true) {
        if (answer >= queue1.length*3) return -1;

        if (sum===half) return answer;
        else if (sum < half) {
            right ++
            sum += list[right]
        }
        else {
            left ++
            sum -= list[left-1]
        }
        answer ++
    }

}

설명 (투 포인터 활용)

  1. queue1과 queue2를 한 줄로 놓은 list를 생성했습니다.
  2. queue1의 양 끝을 left, right로 설정했습니다.
  3. queue1의 sum이 half보다 크면 left++, 작으면 right++
    3-1. 합계를 매번 구하지 않고, 움직이는 포인터 하나씩만 계산
  4. 종료조건.
    4-1. sum===half이면 return answer,
    4-2. answer가 최악의 경우의 수 넘어가면 return -1

0개의 댓글