문제 설명
해결과정
Solution.java
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
// 최소 계산횟수
int answer = -1;
// Queue를 구현하기 위한 LinkedList
LinkedList<Integer> Queue1 = new LinkedList<>();
LinkedList<Integer> Queue2 = new LinkedList<>();
// queue1과 queue2의 현재 총 합
long Queue1total = 0;
long Queue2total = 0;
// 두 배열에서 최고 원소 값
int max = 0;
// 배열 탐색 진행
for(int i = 0; i < queue1.length; i++) {
// Queue에다가 원소를 집어넣는다.
Queue1.addLast(queue1[i]);
Queue2.addLast(queue2[i]);
// 각 배열의 현재 총합을 저장한다.
Queue1total += queue1[i];
Queue2total += queue2[i];
// 가장 큰 원소를 구한다.
max = queue1[i] > max ? queue1[i] : max;
max = queue2[i] > max ? queue2[i] : max;
}
// 현재 계산횟수
int cnt = 0;
// 현재 두 배열의 원소들의 합
long total = Queue1total + Queue2total;
// 총 원소의 합이 홀수거나 가장 큰 원소의 값이 total의 절반보다 크다면 계산 할 수가 없다.
if(total % 2 != 0 || total/2 < max) {
return -1;
} else {
while(cnt < queue1.length*3) {
if(Queue1total < total / 2) {
// Queue2의 첫번째 값을 가져오고 지운다.
int element = Queue2.removeFirst();
Queue2total -= element;
// Queue2의 첫번째 값을 Queue1의 마지막에 추가한다.
Queue1.addLast(element);
Queue1total += element;
} else if(Queue2total < total / 2) {
// Queue1의 첫번째 값을 가져오고 지운다.
int element = Queue1.removeFirst();
// Queue1의 첫번째 값을 Queue2의 마지막에 추가한다.
Queue2.addLast(element);
Queue1total -= element;
Queue2total += element;
} else if (Queue1total == Queue2total) {
answer = cnt;
break;
}
cnt++;
}
}
return answer;
}
}
Java
복사