본문 바로가기

코딩테스트/programmers

두 큐 합 같게 만들기

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

 

프로그래머스

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

programmers.co.kr

 

정해진 규칙에 따라 큐를 동작시키면 된다. 굳이 큐를 비교할 필요도 없는 예외 케이스(절대 두 큐의 합이 같을 수 없는 케이스)만 처리해주면 비교적 쉬움..

 

import java.util.*;

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

        long sum1 = 0;
        for (int num : queue1) sum1 += num;
        
        long sum2 = 0;
        for (int num : queue2) sum2 += num;
        
        if (sum1 == sum2) return 0;
        
        goal = sum1 + sum2;
        if (goal % 2L != 0L) return -1;
        
        goal /= 2L;

        return find(queue1, queue2);
 
    }
    
    public int find(int[] queue1, int[] queue2) {
        
        Queue<Integer> q1 = new LinkedList();
        Queue<Integer> q2 = new LinkedList();
        
        long sum = 0L;
        for (int i = 0; i < queue1.length; i++) {
            int num = queue1[i];
            q1.offer(num);
            sum += num;
        }
        
        for (int i = 0; i < queue2.length; i++) {
            int num = queue2[i];
            q2.offer(num);
        }
        
        int cnt = 0;
        while (true) {
            // System.out.printf("[%d] sum : %d (q1 : %d, q2 : %d)\n", cnt, sum, q1.size(), q2.size());
            
            if (sum > goal) {
                if (q1.isEmpty()) break;
                int num = q1.poll();
                sum -= num;
                q2.offer(num);
            } else if (sum < goal) {
                if (q2.isEmpty()) break;
                int num = q2.poll();
                sum += num;
                q1.offer(num);
            } else {
                return cnt;
            }
            
            cnt++;
            
            if (cnt > 3 * queue1.length) break;
            
        }
        
        return -1;
    }
}

'코딩테스트 > programmers' 카테고리의 다른 글

큰 수 만들기  (0) 2023.11.15
삼각 달팽이  (0) 2023.11.13
소수 찾기  (1) 2023.11.13
다리를 지나는 트럭  (0) 2023.11.09
가장 큰 수  (0) 2023.11.09