본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 두 큐 합 같게 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/118667

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

두 큐 합이 같은 경우를 만들기 위해 몇 번의 작업이 필요한지를 구하는 문제

문제 그대로 두개의 큐를 만들고 현재 큐의 합을 나타내는 q1Sum, q2Sum이라는 변수를 이용하여 직접 이동시켜 정답이 나올 때까지 반복하였다

두 큐 합이 같을때까지 answer를 증가시켜 같아지는 순간의 answer값이 정답으로 출력되도록 하였다

import java.util.*;
class Solution {
    public int solution(int[] queue1, int[] queue2) {
        int answer = 0;
        long q1Sum = 0;
        long q2Sum = 0;
        Queue<Integer> q1 = new LinkedList<>();
        Queue<Integer> q2 = new LinkedList<>();
        for (int i=0; i<queue1.length; i++) {
            q1Sum += queue1[i];
            q1.add(queue1[i]);
            q2Sum += queue2[i];
            q2.add(queue2[i]);
        }
        long sum = q1Sum + q2Sum;
        long n = sum / 2;
        if (sum%2==1) return -1;
       while (answer < queue1.length*3) {
            if (q1Sum == n) return answer;
            if (q1Sum > n) {
                int tmp = q1.poll();
                q2.add(tmp);
                q1Sum -= tmp;
                q2Sum += tmp;
                answer++;
            } else {
                int tmp = q2.poll();
                q1.add(tmp);
                q2Sum -= tmp;
                q1Sum += tmp;
                answer++;
            }
        }
        return -1;
    }
}