728x90
SMALL
문제 이해
- 길이가 같은 큐 두개가 주어진다.
- 큐에 들어간 원소의 합이 같아지게 pop,insert의 작업을 한다.
- 작업의 횟수가 최소값인 경우를 구해야 한다.
- 원소의 값은 10^9 까지이고 원소의 개수는 30만개로 sum을 구하기에는 스택오버 플로우가 일어나기
때문에 sum 타입을 long으로 해준다. - 최소횟수를 구하기 위해서 주어진 두 큐의 합을 비교한다. 큰합계(큐) -> 작은합계(큐) 원소를 큰합 큐에서 poll 작은합 큐로 원소를 insert
- 위 처럼 큐를 pop, insert 하면서 두큐의 합계가 같아 질때까지 반복한다.
- 예#3 번처럼 원소의 합이 안나올 경우를 생각해야 한다.
- 안나오는 경우 len(que) * 3 < answer 일 경우 루프에서 탈출시킨다.
import java.util.*;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
long que1Sum = 0;
long que2Sum = 0;
int size = queue1.length * 3;
Queue<Integer> que1 = new LinkedList<>();
Queue<Integer> que2 = new LinkedList<>();
for(int i = 0; i<queue1.length; i++){
que1.add(queue1[i]);
que2.add(queue2[i]);
que1Sum += queue1[i];
que2Sum += queue2[i];
}
while(que1Sum != que2Sum){
if(size < answer){
answer = -1;
break;
}
if(que1Sum > que2Sum){
que2Sum += que1.peek();
que1Sum -= que1.peek();
que2.add(que1.poll());
}else{
que1Sum += que2.peek();
que2Sum -= que2.peek();
que1.add(que2.poll());
}
answer++;
}
return answer;
}
}
728x90
LIST
'자바 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 야근 지수 - Java(자바) (0) | 2024.05.28 |
---|---|
[프로그래머스] 행렬 테두리 회전하기 - Java(자바) (0) | 2024.05.27 |
[프로그래머스] 거리두기 확인하기 - Java(자바) (0) | 2024.05.21 |
[프로그래머스] 괄호 변환 -Java(자바) (0) | 2024.05.13 |
[프로그래머스] [1차] 프렌즈4블록 - Java(자바) (1) | 2024.04.26 |