728x90
코드 힌트
- 큐의 합을 맞추기:
- 두 큐의 합을 비교해, 두 큐의 합이 같아지도록 큐 간의 원소를 옮깁니다.
- 각 큐의 합을 추적하면서 목표 합과 비교합니다.
- 목표 합 설정:
- 두 큐의 모든 원소의 합을 계산하고, 이를 절반으로 나눈 값이 목표 합이 됩니다.
- 최대 반복 횟수:
- 두 큐의 원소들을 이동하면서 큐 간의 합을 맞춥니다.
- 두 큐의 원소 개수보다 한 번 더 이동할 수 있도록 반복 횟수를 제한합니다.
- 큐 간 이동:
- 첫 번째 큐의 합이 목표보다 작으면, 두 번째 큐에서 원소를 하나 빼서 첫 번째 큐에 추가합니다.
- 반대로 첫 번째 큐의 합이 목표보다 크면, 첫 번째 큐에서 원소를 빼서 두 번째 큐에 추가합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
Queue<Integer> q1 = new LinkedList<>(); // 첫 번째 큐
Queue<Integer> q2 = new LinkedList<>(); // 두 번째 큐
long q1Sum = 0; // 첫 번째 큐의 원소 합
long q2Sum = 0; // 두 번째 큐의 원소 합
int n = queue1.length + queue2.length + 1; // 최대 반복 횟수 (큐 크기보다 1회 더 반복 가능)
// 첫 번째 큐의 원소를 큐에 추가하고 합계를 계산
for (int i = 0; i < queue1.length; i++) {
q1.add(queue1[i]);
q1Sum += queue1[i];
}
// 두 번째 큐의 원소를 큐에 추가하고 합계를 계산
for (int i = 0; i < queue2.length; i++) {
q2.add(queue2[i]);
q2Sum += queue2[i];
}
long target = (q1Sum + q2Sum) / 2; // 목표 합 (두 큐의 합을 반으로 나눈 값)
int count = 0; // 이동 횟수 카운트
while (q1Sum != target && count <= n) {
count++;
// q1의 합이 목표보다 작으면 q2에서 원소를 빼서 q1에 추가
if (q1Sum < target) {
int num = q2.poll();
q1.add(num);
q1Sum += num;
}
// q1의 합이 목표보다 크면 q1에서 원소를 빼서 q2에 추가
else {
int num = q1.poll();
q2.add(num);
q1Sum -= num;
}
}
// 두 큐의 합이 목표와 같으면 이동 횟수 반환, 그렇지 않으면 -1 반환
if (q1Sum == target) {
return count;
}
return -1;
}
}
728x90
'프로그래머스(Java) > Level 2' 카테고리의 다른 글
[프로그래머스] 삼각 달팽이 (0) | 2024.09.22 |
---|---|
[프로그래머스] 쿼드압축 후 개수 세기 (0) | 2024.09.21 |
[프로그래머스] 소수 찾기 (0) | 2024.09.07 |
[프로그래머스] 2 x n 타일링 (0) | 2024.09.03 |
[프로그래머스] [1차] 프렌즈4블록 (1) | 2024.09.03 |