해당 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/118667
루프에 탈출 지점은 언제로 해야할 지 고민이였다.
처음엔 두 큐중 하나라도 비어있는 상태가 되어있으면 되지 않을까 고민했지만 시간초과가 발생했다.
그 다음에 생각한 방법이 두 큐의 요소 갯수 합보다 동작횟수가 커지면 루프탈출 조건을 설정해봤더니 테스트1번에서 실패했다.
어떤 예외케이스가 있을까 라고 생각하다가
[1,1,6,8,7]
[1,1,1,1,1] 케이스에서 횟수 + 1까지 고려해야한다는 사실을 알았다.
public int solution(int[] queue1, int[] queue2) {
Queue<Long> q1 = arrayToQueue(queue1);
Queue<Long> q2 = arrayToQueue(queue2);
long sum1 = getQueueSum(q1);
long sum2 = getQueueSum(q2);
int answer = 0;
int maxCount = (q1.size() + q2.size()) + 1;
while (sum1 != sum2) {
if (answer > maxCount) {
return -1;
}
if (sum1 < sum2) {
long element = q2.poll();
q1.add(element);
sum1 += element;
sum2 -= element;
} else {
long element = q1.poll();
q2.add(element);
sum2 += element;
sum1 -= element;
}
answer++;
}
return answer;
}
루프의 탈출 조건이 중요한 문제같은데 다른사람의 풀이를 보니 두 큐의 요소의 갯수 합 * 2로 푸는 경우가 많았다. 이유는 최악의 경우의 수를 했을 때 라고 하는데 내 머리로는 그 만큼 도는 경우를 모르겠다... 고민해 봐야겠다