[C#] 쿠키 구입

소슬잎·2023년 11월 21일

프로그래머스 문제

https://school.programmers.co.kr/learn/courses/30/lessons/49995

풀이 후기

1. 분석

자려고 했는데 카페인 때문에 잠이 안 와서 한 문제 더... 처음 볼 때는 4레벨인지 모르고 그냥 m 위치를 구해서 배열 자르고 각각의 위치에서 더했다. 내 코드의 뭐가 문제지 살펴보고 있었는데 알고 보니 문제를 잘못 이해했던 것. m 위치를 구하고 동시에 원한다면 앞과 뒤에서도 배열을 무한하게 자를 수 있다.

초과코딩으로 머리가 굳은 것인지 별 생각이 안 나서 질문하기를 봤는데 이해가 안되길래 그냥 내 마음대로 풀어봤다.

  1. 오른쪽->왼쪽, 왼쪽->오른쪽 누적 합을 구하기
  2. 이제 분할 지점으로 쿠키 합을 빠르게 얻음
  3. 오른쪽 지점이 크면, 맨 앞 요소를 뺀다.
  4. 왼쪽 지점이 크면, 맨 뒤 요소를 뺀다.
  5. 빨리 돌아가게 조건을 덕지덕지 붙인다.

또 코드 꼬여서 이상하게 돌아가서 라이더쓰고 고쳤더니 풀어지긴 했다. 자고 싶었는데 다행이다.

2. 실행 결과

3. 코드

using System;

public class Solution {
    public int solution(int[] cookie) {
        int len = cookie.Length;
        int[] leftCookie = new int[len];
        int[] rightCookie = new int[len];

        int leftSum = 0;
        int rightSum = 0;
        for(int i = 0; i < len; i++){
            leftSum += cookie[i];
            leftCookie[i] = leftSum;
            rightSum += cookie[len - i - 1];
            rightCookie[len - i - 1] = rightSum;
        }
        
        int max = 0;
        for(int i = 0; i < len - 1; i++){
            int rightIndex = i + 1;
            int leftCookieSum = leftCookie[i];
            int rightCookieSum = rightCookie[rightIndex];
            
            if(leftCookieSum == rightCookieSum){
                max = Math.Max(max, rightCookieSum);
            }
            else{
                int lplus = 0;
                int rminus = len - 1;
                while(lplus <= i && rminus >= rightIndex && leftCookieSum > max && rightCookieSum > max){
                    if(leftCookieSum > rightCookieSum){
                        leftCookieSum -= cookie[lplus];
                        lplus++;
                    }
                    else if(leftCookieSum < rightCookieSum){
                        rightCookieSum -= cookie[rminus];
                        rminus--;
                    }
                    else{
                        max = Math.Max(max, leftCookieSum);
                        break;
                    }
                }
            }
        }
        
        return max;
    }
}
profile
그냥 바보

0개의 댓글