https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
정해진 규칙에 따라 큐를 동작시키면 된다. 굳이 큐를 비교할 필요도 없는 예외 케이스(절대 두 큐의 합이 같을 수 없는 케이스)만 처리해주면 비교적 쉬움..
import java.util.*;
class Solution {
long goal = 0;
public int solution(int[] queue1, int[] queue2) {
long sum1 = 0;
for (int num : queue1) sum1 += num;
long sum2 = 0;
for (int num : queue2) sum2 += num;
if (sum1 == sum2) return 0;
goal = sum1 + sum2;
if (goal % 2L != 0L) return -1;
goal /= 2L;
return find(queue1, queue2);
}
public int find(int[] queue1, int[] queue2) {
Queue<Integer> q1 = new LinkedList();
Queue<Integer> q2 = new LinkedList();
long sum = 0L;
for (int i = 0; i < queue1.length; i++) {
int num = queue1[i];
q1.offer(num);
sum += num;
}
for (int i = 0; i < queue2.length; i++) {
int num = queue2[i];
q2.offer(num);
}
int cnt = 0;
while (true) {
// System.out.printf("[%d] sum : %d (q1 : %d, q2 : %d)\n", cnt, sum, q1.size(), q2.size());
if (sum > goal) {
if (q1.isEmpty()) break;
int num = q1.poll();
sum -= num;
q2.offer(num);
} else if (sum < goal) {
if (q2.isEmpty()) break;
int num = q2.poll();
sum += num;
q1.offer(num);
} else {
return cnt;
}
cnt++;
if (cnt > 3 * queue1.length) break;
}
return -1;
}
}
'코딩테스트 > programmers' 카테고리의 다른 글
큰 수 만들기 (0) | 2023.11.15 |
---|---|
삼각 달팽이 (0) | 2023.11.13 |
소수 찾기 (1) | 2023.11.13 |
다리를 지나는 트럭 (0) | 2023.11.09 |
가장 큰 수 (0) | 2023.11.09 |