https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
◎ 문제

◎ 코드 및 풀이
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;
for(int i=0; i<queue1.length; i++){
q1.add(queue1[i]);
q1Sum += queue1[i];
q2.add(queue2[i]);
q2Sum += queue2[i];
}
// 총 합이 홀수일 경우 -1 반환
if((q1Sum+q2Sum)%2==1){
return -1;
}
int answer = 0;
int tmp = 0;
while(answer <= (queue1.length + queue2.length)*2){
if(q1Sum < q2Sum){
tmp = q2.poll();
q1.add(tmp);
q1Sum += tmp;
q2Sum -= tmp;
answer++;
} else if (q1Sum > q2Sum){
tmp = q1.poll();
q2.add(tmp);
q1Sum -= tmp;
q2Sum += tmp;
answer++;
} else {
return answer;
}
}
return -1;
}
}
◎ 기록
간단한 구현 문제였지만 25,26,27 번 테스트 케이스에서 계속 실패해서 꽤나 오래 걸렸습니다.
다시 한번 천천히 문제를 읽던 도중 문제의 제한사항에서 문제점을 발견할 수 있었습니다.
주의: 언어에 따라 합 계산 과정 중 산술 오버플로우 발생 가능성이 있으므로 long type 고려가 필요합니다.
1. 문제를 잘 읽을 것..
2. 항상 오버플로우 가능성을 염두해두고 풀 것..
