문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/118667

제한 사항

입출력 예

풀이
import java.util.Queue;
import java.util.LinkedList;
class Solution {
public int solution(int[] queue1, int[] queue2) {
int answer = 0;
long q1Sum = 0, q2Sum = 0;
Queue<Integer> q1 = new LinkedList<>();
Queue<Integer> q2 = new LinkedList<>();
for (int i : queue1) {
q1Sum += i;
q1.add(i);
}
for (int i : queue2) {
q2Sum += i;
q2.add(i);
}
for (int i = 0; i < queue1.length * 3;) {
if (q1Sum > q2Sum) { // q1Sum 이 q2Sum 보다 크면 q1 에서 추출
Integer temp = q1.poll();
q2.add(temp);
q1Sum -= temp;
q2Sum += temp;
} else if (q1Sum < q2Sum) { // q2Sum 이 q1Sum 보다 크면 q2 에서 추출
Integer temp = q2.poll();
q1.add(temp);
q2Sum -= temp;
q1Sum += temp;
} else { // q1Sum 과 q2Sum 이 같은 경우
return answer;
}
answer++;
i++;
}
return -1;
}
}
후기
통과하긴 했으나 굉장히 찝찝하다... 이랬던 적은 처음이다. 그 이유는 첫 번째 제출했을 때 1번 테스트만 통과하지 못했는데 이유를 도저히 모르기 때문이다. 케이스가 설마 queue1 * 2보다 큰 경우가 있나 해서 3으로 크기를 늘렸는데 전부 통과됐다. 그런데 몇 번까지 반복문을 돌려야 하는지 명확하게 어떤 케이스가 있고 어떤 이유가 있어서 그렇게 설정한 것인가 하는 근거가 없어서 이걸 통과했다고 해야 할지... 질문하기에서도 찾아봤는데 사람들마다 최대로 돌아야할 값에 대한 의견이 다양했다. 결론은 정확히 몇 번 반복해야 하는지 모르겠다!! 이걸 제외하면 문제 자체는 어려운 편은 아니었다. 여담이지만 처음에 파라미터명이 queue1이어서 Queue로 주는 줄 알았는데 나중에 다시 보니까 배열이었다;;
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][Java][Lv. 1] 가장 많이 받은 선물 (0) | 2024.02.02 |
|---|---|
| [프로그래머스][Java][Lv. 2] 삼각 달팽이 (0) | 2024.02.01 |
| [프로그래머스][Java][Lv. 2] 소수 찾기 (0) | 2024.01.30 |
| [프로그래머스][Java][Lv. 2] 다리를 지나는 트럭 (0) | 2024.01.23 |
| [프로그래머스][Java][Lv. 2] 택배상자 (0) | 2023.12.29 |