레벨: 2
언어: Java
문제:
제한사항:
최근에 나온문제라서 좋아요 많이 받은 코드가 안보이는데 나중에 나오면 추가해놓을게요..
일단 문제 풀면서 느낀게 양쪽 큐의 합계 낮은쪽에 더해주는 방식으로 가야되는 그리디 알고리즘으로 판단했습니다.
제출시 test1이 답이 -1로 보이는데 분기조건이 (queue1.length + queue2.length) * 2인 이유는 양쪽큐길이 전부 돌았을 횟수로 잡아놨는데 명확한기준을 어떤식으로 잡아야될지 판단이 안섰습니다...
합계가 int자료형이면 오버플로우 날수있으니 long자료형 사용으로 갈필요가 있는데 안하면 25~28테스트 케이스 오류나더라구요..
class Solution {
public int solution(int[] queue1, int[] queue2) {
Queue<Integer> que1 = new LinkedList<>();
Queue<Integer> que2 = new LinkedList<>();
long sum1 = 0, sum2 = 0;
for(int i = 0; i < queue1.length; i++) {
sum1 += queue1[i];
que1.offer(queue1[i]);
}
for(int i = 0; i < queue2.length; i++) {
sum2 += queue2[i];
que2.offer(queue2[i]);
}
int count = 0;
while(sum1 != sum2) {
count++;
if(sum1 > sum2) {
int value = que1.poll();
sum1 -= value;
sum2 += value;
que2.offer(value);
} else {
int value = que2.poll();
sum1 += value;
sum2 -= value;
que1.offer(value);
}
if(count > (queue1.length + queue2.length) * 2) return -1;
}
return count;
}
}