반응형
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 |