[프로그래머스] 두 큐 합 같게 만들기(Java)

수경·2023년 1월 1일
0

problem solving

목록 보기
100/174

프로그래머스 - 두 큐 합 같게 만들기

풀이

  1. 두 개의 큐를 만들고 input으로 들어온 값을 각각 저장
  2. 매번 큐의 요소들의 합을 구하지 않기 위해 sum 값을 저장한 후 덧셈 뺄셈 연산을 사용
  3. 두 큐의 합을 비교해서 합이 더 큰 큐의 요소를 더 합이 더 작은 큐에 삽입
  4. 두 큐가 비어있거나, 연산의 수가 두 큐의 요소의 개수 + 1 보다 커지면 return -1
'result > q1.size() + q2.size() + 1' 일때 return -1 인 조건

queue1 : [3, 3, 3, 3]
queue2 : [3, 3, 21, 3]

-> result : 9
-> 두 큐의 개수 8개보다 연산의 수가 큼

코드

import java.util.LinkedList;
import java.util.Queue;

public class MakeEqual {
	public int solution(int[] queue1, int[] queue2) {
		Queue<Integer> q1 = new LinkedList<>();
		Queue<Integer> q2 = new LinkedList<>();

		long sum1 = initQueue(queue1, q1);
		long sum2 = initQueue(queue2, q2);

		int result = 0;

		while (sum1 != sum2) {
			if (q1.isEmpty() || q2.isEmpty() || result > q1.size() + q2.size() + 1) return -1;
			if (sum1 > sum2) {
				int target = q1.poll();
				sum1 -= target;
				sum2 += target;
				q2.offer(target);
			} else {
				int target = q2.poll();
				sum2 -= target;
				sum1 += target;
				q1.offer(target);
			}
			result += 1;
		}
		return result;
	}

	private long initQueue(int[] arrQueue, Queue<Integer> queue) {
		long sum = 0;
		for (int q : arrQueue) {
			queue.add(q);
			sum += q;
		}
		return sum;
	}

	public static void main(String[] args) {
		MakeEqual makeEqual = new MakeEqual();
		System.out.println(makeEqual.solution(new int[]{3, 2, 7, 2}, new int[]{4, 6, 5 ,1}));   // 2
		System.out.println(makeEqual.solution(new int[]{1, 2, 1, 2}, new int[]{1, 10, 1, 2}));   // 7
		System.out.println(makeEqual.solution(new int[]{1, 1}, new int[]{1, 5}));   // -1
		System.out.println(makeEqual.solution(new int[]{3, 3, 3, 3}, new int[]{3, 3, 21, 3}));   // -1
	}
}
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글