[코딩테스트] 프로그래머스 - 두 큐 합 같게 만들기(Java)

proman·2022년 8월 21일
0

Coding-Test

목록 보기
3/21
post-thumbnail

🎁 설명

레벨: 2
언어: Java
문제:

제한사항:

😎 느낀점

최근에 나온문제라서 좋아요 많이 받은 코드가 안보이는데 나중에 나오면 추가해놓을게요..
일단 문제 풀면서 느낀게 양쪽 큐의 합계 낮은쪽에 더해주는 방식으로 가야되는 그리디 알고리즘으로 판단했습니다.
제출시 test1이 답이 -1로 보이는데 분기조건이 (queue1.length + queue2.length) * 2인 이유는 양쪽큐길이 전부 돌았을 횟수로 잡아놨는데 명확한기준을 어떤식으로 잡아야될지 판단이 안섰습니다...
합계가 int자료형이면 오버플로우 날수있으니 long자료형 사용으로 갈필요가 있는데 안하면 25~28테스트 케이스 오류나더라구요..

🎹 작성한 코드

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        Queue<Integer> que1 = new LinkedList<>();
        Queue<Integer> que2 = new LinkedList<>();

        long sum1 = 0, sum2 = 0;
        for(int i = 0; i < queue1.length; i++) {
            sum1 += queue1[i];
            que1.offer(queue1[i]);
        }

        for(int i = 0; i < queue2.length; i++) {
            sum2 += queue2[i];
            que2.offer(queue2[i]);
        }


        int count = 0;
        while(sum1 != sum2) {
            count++;

            if(sum1 > sum2) {
                int value = que1.poll();
                sum1 -= value;
                sum2 += value;
                que2.offer(value);
            } else {
                int value = que2.poll();
                sum1 += value;
                sum2 -= value;
                que1.offer(value);
            }

            if(count > (queue1.length + queue2.length) * 2) return -1;
        }


        return count;
    }
}

0개의 댓글