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

AMUD·2022년 9월 8일
0

Algorithm

목록 보기
37/78

문제


문제링크

접근

  • 처음에 엄청난 탐색 알고리즘이 있을 것 같았지만, 막상 풀어보니 순서대로 값을 넣고 빼며 비교하며 답을 찾으면 되는 문제였다.
  • 큐에 대한 이해가 기반이 되어야 한다.
  • 계속 1번 테케가 실패라고 뜨길래 다른 사람의 글을 참고하였는데, 2배가 아닌 3배로 하면 해결이 된다는 문구에 그렇게 하였더니 통과되었다. 사실 아직까지도 그 이유를 정확히 모르겠당..

소스 코드

import java.util.*;

class Main {
    public static void main(String[] args) throws Exception {
        int[] queue1 = {3, 2, 7, 2};
        int[] queue2 = {4, 6, 5, 1};
        Solution sol = new Solution();
        System.out.println("result : " + sol.solution(queue1, queue2));
    }
}

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        int length = queue1.length;
        Queue<Integer> q1 = new LinkedList<>();
        Queue<Integer> q2 = new LinkedList<>();
        long sum1 = 0;
        long sum2 = 0;

        for(int i = 0; i < length; i++) {
            sum1 += queue1[i];
            q1.offer(queue1[i]);

            sum2 += queue2[i];
            q2.offer(queue2[i]);
        }

        int cnt = 0;
        while (sum1 != sum2) {
            if(cnt > length * 3) return -1;
            cnt++;

            int currNum = -1;
            if (sum1 > sum2) {
                currNum = q1.poll();
                q2.offer(currNum);
                sum1 -= currNum;
                sum2 += currNum;
            }

            else {
                currNum = q2.poll();
                q1.offer(currNum);
                sum1 += currNum;
                sum2 -= currNum;
            }
        }
        return cnt;
    }
}
profile
210's Velog :: Ambition Makes Us Diligent

0개의 댓글