-
문제
https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 해석
접근 방법
주어진 두 큐의 합을 같게 만들 수 있는 최소 횟수 계산
풀이 과정
두 큐의 차이(q1의 합계 - q2의 합계)를 sum에 저장합니다.
그리고 시간 복잡도를 고려해 원소를 shift()하는 대신 탐색해야 할 원소의 인덱스를 변수로 관리합니다.
sum이 양수면 q2의 원소를 q1에 넣고, 음수면 q1의 원소를 q2에 넣습니다.
위 작업을 while문을 통해 반복합니다. 단, 다음과 같은 경우 반복을 중지하고 -1을 반환합니다.
- 큐에 더이상 옮길 수 있는 원소가 없을 때
- 다른 큐에 넣었던 모든 원소를 원래 큐로 다시 넣었을 때
전체 코드
function solution(q1, q2) { const [l1, l2] = [q1.length, q2.length]; let sum = q1.reduce((a, b) => a + b) - q2.reduce((a, b) => a + b); let [x1, x2, ans] = [0, 0, 0]; while (q1.length - l1 < l2 || q2.length - l2 < l1) { if (!sum) return ans; if (sum > 0) { if (x1 >= q1.length) return -1; q2.push(q1[x1]); sum -= 2 * q1[x1]; x1++; } else { if (x2 >= q2.length) return -1; q1.push(q2[x2]); sum += 2 * q2[x2]; x2++; } ans++; } return -1; }'Algorithm > JavaScript' 카테고리의 다른 글
[PRO] 프로그래머스 Lv.2 택배상자 (Javascript) (0) 2024.11.21 [PRO] 프로그래머스 Lv.2 소수 찾기 (Javascript) (3) 2024.11.20 [PRO] 프로그래머스 Lv.2 프로세스 (Javascript) (0) 2024.11.19 [PRO] 프로그래머스 Lv.2 다리를 지나가는 트럭 (Javascript) (1) 2024.11.17 [PRO] 프로그래머스 Lv.2 전화번호 목록 (Javascript) (0) 2024.11.16