본문 바로가기
공부/알고리즘

2022 KAKAO TECH INTERNSHIP > 두 큐 합 같게 만들기

by shining park 2023. 12. 6.

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

 

프로그래머스

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

programmers.co.kr

 

- 나의 풀이

Queue : FIFO (Fisrt In First Out)

import : java.utill.*; / import java.util.LinkedList; + import java.util.Queue;

 

✅ 정수형 Queue 2개 사용 ➡︎ Queue<Integer> q = new LinkedList<>();

Queue 값 추가 : 해당 큐 맨 뒤에 값 삽입, 값 추가 성공 시 true 반환

     - q.add(x); ➡︎ 큐가 꽉찬 경우 IllegalStateExceiption 에러 발생

     - q.offer(x); ➡︎ 값 추가 실패 시 false 반환

Queue 값 삭제 : 해당 큐 맨 앞에 값 반환 후 삭제

     - q.remove(); ➡︎ 큐가 비어있는 경우 NoSuchElementException 에러 발생

     - q.poll(); ➡︎ 큐가 비어있는 경우 Null 반환

     - q.clear(); ➡︎ 큐 초기화

Queue 값 확인 : 해당 큐 맨 앞에 값 반환

     - q.element(); ➡︎ 큐가 비어있는 경우 NoSuchElementException 에러 발생

     - q.peek(); ➡︎ 큐가 비어있는 경우 Null 반환

 

✅ 두 큐의 합의 절반 ➡︎ 도달해야하는 한쪽 큐의 합 : sumGoal

두 큐의 합이 홀수라면, 각각의 두 큐가 같은 합을 가질 수 없음

 

- 나의 코드

import java.util.*;
import java.lang.*;

class Solution {
    public int solution(int[] queue1, int[] queue2) {
        int answer = 0;
        long sumGoal = 0;
        long sumTotal = 0;
        long sum1 = 0;
        
        Queue<Integer> q1 = new LinkedList<>();
        Queue<Integer> q2 = new LinkedList<>();
        
        for(int i=0; i<queue1.length; i++) {
            sumTotal += queue1[i] + queue2[i];
            sum1 += queue1[i]; 
            
            q1.offer(queue1[i]);
            q2.offer(queue2[i]);
        }

        sumGoal = sumTotal / 2;
        
        if((sumTotal % 2) != 0) {
            return -1;
        }
        
        while(true) {
            if(answer > (queue1.length + queue2.length) * 2) {
                return -1;
            }
            
            if(sum1 == sumGoal) {
                break;
            } else if(sum1 > sumGoal) {
                sum1 -= q1.peek();
                q2.offer(q1.poll());
            } else {
                sum1 += q2.peek();
                q1.offer(q2.poll());
            }
            answer++;
        }
        
        return answer;
    }
}

'공부 > 알고리즘' 카테고리의 다른 글

카펫  (0) 2024.08.03
2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물  (0) 2024.08.01
같은 숫자는 싫어  (0) 2024.08.01
폰켓몬  (0) 2024.08.01
2022 KAKAO TECH INTERNSHIP > 성격 유형 검사하기  (3) 2023.12.01