반응형
https://school.programmers.co.kr/learn/courses/30/lessons/118667?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr


풀이
문제 설명에 나와있는 내용대로 큐를 이용해서 풀면 된다.
문제를 보자마자 높은 값에서 낮은 값으로 인자를 이동시키면 풀면 된다는 걸 알았다.
하지만 큐의 선언과 사용 방법을 알지 못해서 구글링을 했다.
이 문제에서 주의해야 할 건 합계(sum)가 int 형이면 오버플로우가 발생할 수 있기 때문에 long 형으로 선언해야 한다는 거다. 사실 문제를 잘 읽고 풀었다면 별 문제없을 거라고 생각한다.
import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int[] queue1, int[] queue2) { int answer = 0; long sum1 = 0; // queue1 을 모두 더한 값 long sum2 = 0; // queue2 를 모두 더한 값 Queue<Integer> que1 = new LinkedList<>(); Queue<Integer> que2 = new LinkedList<>(); // que1 과 sum1 에 값을 넣어줌 for (int i=0; i<queue1.length; i++) { sum1 += queue1[i]; que1.add(queue1[i]); } // que2 과 sum2 에 값을 넣어줌 for (int i=0; i<queue2.length; i++) { sum2 += queue2[i]; que2.add(queue2[i]); } int tmp = 0; // 큰 값의 큐의 첫 번째 인자를 넣기 위한 변수 while (sum1 != sum2) { answer++; if (sum1 > sum2) { tmp = que1.poll(); sum2 += tmp; sum1 -= tmp; que2.add(tmp); } else { tmp = que2.poll(); sum1 += tmp; sum2 -= tmp; que1.add(tmp); } // 인자 값을 다 이동했음에도 sum1 과 sum2 의 값이 다를 경우 if (answer > (queue1.length + queue2.length * 2)) return -1; } return answer; } }
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]JAVA - Level1. 성격 유형 검사하기 (0) | 2022.08.27 |
---|---|
[프로그래머스]JAVA - Level1. 신규 아이디 추천 (0) | 2022.08.23 |
[프로그래머스]JAVA - Level2. 124 나라의 숫자 (0) | 2022.07.10 |
[프로그래머스]JAVA - Level3. N으로 표현 (0) | 2022.07.09 |
[프로그래머스]JAVA - Level3. 입국심사 (0) | 2022.07.05 |