inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

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

    lhs's avatar
    lhs
    Dec 21, 2024
    [프로그래머스] 두 큐 합 같게 만들기(118667)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/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을 반환한다.
    • 두 배열 합의 평균값을 구하고, 포인터 l과 r을 각각 첫 번째 배열의 시작과 두 번째 배열의 시작 위치로 설정한 뒤 반복문을 l이 r보다 작고, 합이 평균값과 다르며, r이 배열 길이를 넘지 않을 때까지 실행한다.
      • 첫 번째 배열의 합이 평균보다 크면, l을 증가시키고 해당 위치의 값을 합에서 뺀다.
      • 반대로 작다면, r을 증가시키고 해당 위치의 값을 합에 더한다.
      • 이후, 결과값 answer를 증가시킨다.
    • 반복문 종료 후, 합과 평균이 다르면 -1을 반환하고, 같으면 결과값을 반환한다.
    Share article
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리

    LHS's Study Space

    RSS·Powered by Inblog