코딩테스트

[프로그래머스]쿠키 구입(python)

다있는닉네임 2023. 3. 9. 15:57

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

 

프로그래머스

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

programmers.co.kr

문제 요약

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

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

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

문제유형

투포인터

아이디어

  1. 왼쪽, 오른쪽 기준점과 기준점들의 합을 정함
  2. 왼쪽 오른쪽이 같을 경우 -> answer값과 비교하여 answer값이 더 적으면 갱신
  3. 왼쪽이 더 클경우
  4. 오른쪽이 더 클경우
  5. 2 ~ 3 조건을 돌면서 쿠키를 나눠줄 수 없을때까지 반복

소스

def solution(cookie):
    answer = 0

    for i in range(len(cookie)-1):
        left, right = i, i+1
        left_sum, right_sum = cookie[i], cookie[i+1]
        
        while True:
            if left_sum == right_sum and left_sum > answer:
                answer = left_sum
            if left > 0 and left_sum <= right_sum:
                left -= 1
                left_sum += cookie[left]
            elif right < len(cookie)-1 and left_sum >= right_sum:
                right += 1
                right_sum += cookie[right]
            else:
                break
    return

'코딩테스트' 카테고리의 다른 글

[백준]A와 B(python)  (0) 2023.03.13
[백준]제로(python)  (0) 2023.03.10
[백준]스택 수열(python)  (0) 2023.03.09
[프로그래머스]올바른 괄호(python)  (0) 2023.03.09
[백준]스택(python)  (0) 2023.01.18