Search

두 큐 합 같게 만들기

알고리즘
연습문제
플랫폼
프로그래머스
JCF
LinkedList
상태
해결
생성 일시
2024/01/31 06:24
최종 편집 일시
2024/02/02 11:51

문제 설명

해결과정

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
복사