Skip to main content

[level 4] 쿠키 구입 - 49995

Intro

문제 링크

문제 설명

과자를 바구니 단위로 파는 가게가 있습니다. 이 가게는 1번부터 번까지 차례로 번호가 붙은 바구니 개가 일렬로 나열되어 있습니다.

철수는 두 아들에게 줄 과자를 사려 합니다. 첫째 아들에게는 번 바구니부터 번 바구니까지, 둘째 아들에게는 번 바구니부터 번 바구니까지를 주려 합니다. 단, 두 아들이 받을 과자 수는 같아야 합니다 (). 즉, $A[i]$를 번 바구니에 들어있는 과자 수라고 했을 때, $A[l] + \dots + A[m] = A[m+1] + \dots + A[r]$를 만족해야 합니다.

각 바구니 안에 들은 과자 수가 차례로 들은 배열 cookie가 주어질 때, 조건에 맞게 과자를 살 경우 한 명의 아들에게 줄 수 있는 가장 많은 과자 수를 return 하는 solution 함수를 완성해주세요. (단, 조건에 맞게 과자를 구매할 수 없다면 0을 return 합니다)

제한사항

  • cookie의 길이는 1 이상 2,000 이하입니다.
  • cookie의 각각의 원소는 1 이상 500 이하인 자연수입니다.

입출력 예

cookieresult
[1, 1, 2, 3]3
[1, 2, 4, 5]0

입출력 예 설명

예시 1: 첫째 아들에게 2, 3번 바구니를, 둘째 아들에게 4번 바구니를 사주면 두 아들은 각각 과자 3개를 받습니다.

예시 2: 주어진 조건에 맞게 과자를 살 방법이 없습니다.


구현 코드

public class Solution {
public int solution(int[] cookie) {
int answer = 0;

for (int i = 0; i < cookie.length - 1; i++) {
int left = i;
int leftSum = cookie[i];

int right = i + 1;
int rightSum = cookie[i + 1];

while (true) {
if (leftSum == rightSum && answer < leftSum) { // 두 형제의 쿠키의 합이 같으며, 쿠키의 합이 기존 answer에 저장했던 값보다 큰 경우
answer = leftSum; // answer에 새로 저장
} else if (leftSum <= rightSum && left != 0) { // 오른쪽이 더 많은 경우, 왼쪽을 늘려야함
leftSum += cookie[--left];
} else if (leftSum > rightSum && right != cookie.length - 1) { // 왼쪽이 더 많은 경우, 오른쪽을 늘려야함
rightSum += cookie[++right];
} else { // 더 이상 조절할 수 없을 때
break;
}
}
}

return answer;
}

}

성능 요약

메모리: 52.2 MB, 시간: 21.92 ms

채점결과

정확성: 66.7

효율성: 33.3

합계: 100.0 / 100.0