알고리즘

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

박카스마시며코딩 2022. 9. 2. 12:04

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

 

프로그래머스

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

programmers.co.kr

 

저는 투포인트를 이용해 문제를 해결하였습니다.

저는 먼저 두큐의 합과 합께 두 큐를 합친 배열로 만들면서 첫번째 큐의 합을 구하였습니다.

두 큐의 합이 홀수라면 두 큐의 합을 같게 만들 수 없기에 바로 FAIL을 리턴하였습니다.

두 큐를 합친 배열을 투 포인트를 통해 총합의 1/2와 같은 값이 있는지를 확인하였습니다.

 

package Programmers.KAKAO_INTERN_2022;

public class 두_큐_합_같게_만들기 {
    private static  final int FAIL = -1;
    public int solution(int[] queue1, int[] queue2) {
        int answer = 0;
        long totalSum = 0;
        int size = queue1.length;
        long sum = 0;
        int[] totalQueue = new int[2 * size];
        for(int i = 0 ; i < size ; i++){
            totalSum += queue1[i] + queue2[i];
            sum += queue1[i];
            totalQueue[i] = queue1[i];
            totalQueue[size + i] = queue2[i];
        }
        if(totalSum % 2 != 0){
            return FAIL;
        }
        int si = 0;
        int ei = size;
        while(true){
            if(sum == totalSum / 2){
                return answer;
            }else if(sum < totalSum / 2){
                if(ei >= 2*size){
                    break;
                }
                sum += totalQueue[ei++];
            }else{
                sum -= totalQueue[si++];
            }
            answer++;
        }
        return FAIL;
    }
}