N

(프로그래머스 JS)쿠키 구입 본문

프로그래머스 알고리즘/4단계

(프로그래머스 JS)쿠키 구입

naeunchan 2022. 8. 6. 22:11
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/49995?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

어느 한 중앙을 기준으로 왼쪽, 오른쪽의 쿠키 개수를 더해 형제가 공평하게 쿠키를 최대한으로 가질 수 있도록 한다.

 

for문으로 1 ~ cookie.length 까지 반복한다.

왼쪽에 있는 첫째는 mid - 1 ~ 0 까지의 인덱스를 가지고,

오른쪽에 있는 둘째는 mid ~ cookie.length 까지의 인덱스를 가진다.

 

각 형제의 쿠키를 leftSum, rightSum으로 정하고 쿠키를 시작 지점에서 더해준다.

만약 두 값이 같다면 answer와 leftSum(or rightSum) 중에 큰 값을 answer에 넣어준다.

 

while문으로 쿠키를 더해주자.

leftStart의 인덱스가 0 이상이고 leftSum <= rightSum 이라면

왼쪽에 있는 쿠키를 더해준다.

 

만약 rightStart의 인덱스가 cookie.length보다 작고 rightSum <= leftSum이라면

오른쪽에 있는 쿠키를 더해준다.

 

이 두 사항이 아니라면 flag = false로 하여 다음 반복이 이뤄지지 않도록 한다.

 

마지막은 두 값이 동일한지 확인하여 answer와 leftSum(or rightSum) 중 큰 값을 answer에 넣어준다.

function solution(cookie) {
    const length = cookie.length;
    let answer = 0;
    
    for(let mid = 1; mid < length; mid++){
        let leftStart = mid - 1;
        let rightStart = mid;
        let leftSum = cookie[leftStart--];
        let rightSum = cookie[rightStart++];
        let keep = true;
        
        if(leftSum === rightSum){
            answer = Math.max(answer, rightSum);
        }
        
        while(keep){
            if(leftStart >= 0 && leftSum <= rightSum){
                leftSum += cookie[leftStart--];
            } else if(rightStart < length && rightSum <= leftSum){
                rightSum += cookie[rightStart++];
            } else{
                keep = false;
            }
            
            if(leftSum === rightSum){
                answer = Math.max(answer, rightSum);
            }
        }
    }
    
    return answer;
}
728x90
반응형

'프로그래머스 알고리즘 > 4단계' 카테고리의 다른 글

(프로그래머스 JS)지형 편집  (0) 2022.08.07