읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
유사한 그리디 문제를 본 적이 있으나 이 문제는 적절히 배열을 두 부분집합으로 나누어 부분집합의 합이 같고 그 값이 최대가 되는 값을 찾아야 한다. 쿠키의 길이가 2000인 것으로 보아 $n^2$ 풀이까지는 가능하겠고 투포인터를 사용하면 해결할 수 있겠다.
- 우측 집합도 원소를 가져야 하므로 쿠키길이 - 2까지만 순회, 좌측 포인터는 현재 값, 우측 포인터는 좌측 포인터 + 1로 설정
- 좌측 집합의 값이 작으면 포인터를 좌측으로 이동, 우측 포인터가 작으면 우측으로 이동해야 한다.
- 이동하면서 좌, 우측 집합의 값이 같으면 정답을 갱신하고 좌, 우측을 1씩 이동시킨다.
- 좌측 포인터를 0부터 N -2지점까지 순회했기에 순회가 끝나면 모든 경우의 수가 반영된다.
python 코드
def solution(cookie):
if len(cookie) == 1:
return 0
N = len(cookie)
answer = 0
for i in range(N + 1):
l, r = i, i + 1
l_c, r_c = cookie[l], cookie[r]
while l > -1 and r < N:
if l_c < r_c and l > 0:
l -= 1
l_c += cookie[l]
elif l_c > r_c and r < N - 1:
r += 1
r_c += cookie[r]
elif l_c == r_c:
if l > 0 and r < N - 1:
answer = max(answer, l_c)
l -= 1
r += 1
l_c += cookie[l]
r_c += cookie[r]
else:
break
else:
break
return answer
'Algorithms > Programmers' 카테고리의 다른 글
Programmers. 스타 수열 (0) | 2021.09.09 |
---|---|
Programmers. 삼각 달팽이 (0) | 2021.09.09 |
Programmers. 지형편집 (0) | 2021.09.06 |
Programmers. 사칙연산 (0) | 2021.09.06 |
Programmers. 단어 퍼즐 (0) | 2021.09.04 |