https://school.programmers.co.kr/learn/courses/30/lessons/49995
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1차 시도
첫째 아들에게 쿠키를 주다가 둘째 아들에게 쿠키를 주는 기준점을 정해서 answer을 구하는 방법으로 코드를 구현했습니다.
def solution(cookie):
answer = 0
N = len(cookie)
if N == 1:
return answer
for mid in range(N-1):
l = mid
r = mid+1
while l >= 0 and r <= N-1:
first_cookie = sum(cookie[l:mid+1])
second_cookie = sum(cookie[mid+1:r+1])
if first_cookie == second_cookie:
answer = max(answer, first_cookie)
r += 1
l -= 1
elif first_cookie > second_cookie:
r += 1
else:
l -= 1
return answer
2차 시도
1차 시도에서 시간을 줄일 수 있는 방법으로 while문을 돌 때 sum을 매번 하는 것이 아닌 새롭게 추가된 쿠키를 더하는 방법으로 변경했습니다.
def solution(cookie):
answer = 0
N = len(cookie)
if N == 1:
return answer
for mid in range(N-1):
l = mid
r = mid+1
first_cookie = cookie[l]
second_cookie = cookie[r]
while True:
if first_cookie == second_cookie:
answer = max(answer, first_cookie)
r += 1
l -= 1
if l >= 0 and r <= N-1:
first_cookie += cookie[l]
second_cookie += cookie[r]
else:
break
elif first_cookie > second_cookie:
r += 1
if r <= N-1:
second_cookie += cookie[r]
else:
break
else:
l -= 1
if l >= 0:
first_cookie += cookie[l]
else:
break
return answer
코드 설명
기준점 mid를 for문으로 전부 돕니다.
while문이 핵심 코드인데,
- if first_cookie == second_cookie:(첫째 아들에게 준 쿠키와 둘째 아들에게 준 쿠키가 같다면)
answer와 first_cookie 중 높은 수를 answer로 초기화합니다.
r은 1을 더해주고 l은 1을 뺍니다.
유효한 r과 l이라면 first_cookie와 second_cookie에 바로 전 또는 후의 쿠키를 더해주게 됩니다.
유효하지 않다면 while문을 종료합니다. - elif first_cookie > second_cookie:(첫째 아들에게 준 쿠키가 더 많다면)
r에 1을 더해줍니다.
유효한 r이라면 second_cookie에 바로 후의 쿠키를 더해줍니다.
유효하지 않다면 while문을 종료합니다. - else:(둘째 아들에게 준 쿠키가 더 많다면)
l에 1을 빼줍니다.
유효한 l이라면 first_cookie에 바로 전의 쿠키를 더해줍니다.
유효하지 않다면 while문을 종료합니다.
'프로그래머스-파이썬' 카테고리의 다른 글
가사 검색 (0) | 2024.05.22 |
---|---|
[3차] 자동완성 (0) | 2024.05.16 |
도둑질 (0) | 2024.05.02 |
호텔방 배정 (0) | 2024.04.11 |
무지의 먹방 라이브 (0) | 2024.04.09 |