[프로그래머스] 두 큐 합 같게 만들기(118667)

lhs's avatar
Dec 21, 2024
[프로그래머스] 두 큐 합 같게 만들기(118667)
 

1. 문제 풀이 아이디어

  • 두 포인터를 활용하여 문제를 해결할 수 있다.

2. 나의 정답 코드

class Solution { public int solution(int[] queue1, int[] queue2) { int answer = 0; int[] sum = new int[queue1.length + queue2.length]; long sum1 = 0; long sum2 = 0; for (int i = 0; i < queue1.length; i++) { sum[i] = queue1[i]; sum1 += queue1[i]; } for (int i = 0; i < queue2.length; i++) { sum[queue1.length + i] = queue2[i]; sum2 += queue2[i]; } if ((sum1 + sum2) % 2 == 1) return -1; long avg = (sum1 + sum2) / 2; int l = 0, r = queue1.length; while (l < r && sum1 != avg && r < sum.length) { if (sum1 > avg) { sum1 -= sum[l]; l++; } else { sum1 += sum[r]; r++; } answer++; } return sum1 != avg ? -1 : answer; } }

3. 정리

  • 두 배열을 하나로 합친 배열을 만들어 초기화하면서 각 배열의 합도 계산한다.
  • 두 배열의 합이 홀수라면, 두 배열의 합을 같게 만드는 것은 불가능하므로 -1을 반환한다.
  • 두 배열 합의 평균값을 구하고, 포인터 lr을 각각 첫 번째 배열의 시작과 두 번째 배열의 시작 위치로 설정한 뒤 반복문을 lr보다 작고, 합이 평균값과 다르며, r이 배열 길이를 넘지 않을 때까지 실행한다.
    • 첫 번째 배열의 합이 평균보다 크면, l을 증가시키고 해당 위치의 값을 합에서 뺀다.
    • 반대로 작다면, r을 증가시키고 해당 위치의 값을 합에 더한다.
    • 이후, 결과값 answer를 증가시킨다.
  • 반복문 종료 후, 합과 평균이 다르면 -1을 반환하고, 같으면 결과값을 반환한다.
Share article

LHS's Study Space