본문 바로가기
알고리즘/알고리즘 설명

20230821 [Java] 문제풀이

by JayAlex07 2023. 8. 21.

20230821 [Java] 문제풀이

 

 

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

 

이 문제는 두 큐가 주어지고, 서로의 원소를 주고 받으면서, 서로의 원소들의 값이 같을 수 있도록 만드는 것이다

  • 제일 주의해야할 점은, 두 개의 큐가 있다는 것이다
  • 서로 원소를 주고 받을 때에, 제일 먼저 큐에 들어온 원소를, 다른 큐에게 전달할 수 있다는 점이다

 

각 두 큐의 값을 구하고, 그 값에 따라, 값이 더 큰 큐에서, 더 작은 큐에게 원소를 주는 방식으로 로직을 짜면 된다

 

while문이 무한 루프에 빠질 수 있는 상황이 있어서, answer가 나올 수 있는 최대의 수를 정해준다

  • (answer > queue1.length * 4)

 

두 개의 큐의 합이 같으면, 바로 answer를 출력해준다

  • answer는 원소의 움직임의 개수다
import java.util.*;

class Solution {
    public long solution(int[] queue1, int[] queue2) {
        long answer = 0;
        long queue1Sum = 0;
        long queue2Sum = 0;

        Queue<Integer> q1 = new LinkedList<>();
        Queue<Integer> q2 = new LinkedList<>();

        for (int i = 0; i < queue1.length; i ++) {
            queue1Sum += queue1[i];
            q1.add(queue1[i]);
            queue2Sum += queue2[i];
            q2.add(queue2[i]);
        }

        if ((queue1Sum + queue2Sum) % 2 != 0) return -1;

        long target = (queue1Sum + queue2Sum) / 2;
        boolean notPossible = true;

        while(!q1.isEmpty() && !q2.isEmpty()) {
            if (queue1Sum > queue2Sum) {
                int num = q1.poll();
                queue1Sum -= num;
                queue2Sum += num;
                q2.add(num);
                answer += 1;
            } else if (queue2Sum > queue1Sum) {
                int num = q2.poll();
                queue2Sum -= num; 
                queue1Sum += num;
                q1.add(num);
                answer += 1;
            } else {
                notPossible = false;
                break;
            }

            if (answer > queue1.length * 4) {
                return -1;
            }
        }

        if (notPossible) return -1;

        return answer;
    }
}

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

20230828 [Java] 문제풀이  (1) 2023.08.28
20230822 [Java] 문제풀이  (0) 2023.08.22
20230819 [Java] 문제풀이  (0) 2023.08.19
20230817 [Java] 문제풀이  (0) 2023.08.17
20230816 [Java] 문제풀이  (0) 2023.08.16