📌문제
https://school.programmers.co.kr/learn/courses/30/lessons/118667

🎖️난이도
Level 2
✔️풀이
from collections import deque
def solution(queue1, queue2):
# 예외처리
sum1, sum2 = sum(queue1), sum(queue2)
total = sum1 + sum2
if total % 2 == 1 or max(queue1) > total/2 or max(queue2) > total/2:
return -1
if sum1 == sum2:
return 0
total = int(total/2)
q1, q2 = deque(queue1), deque(queue2)
cnt = 0
# greedy
while True:
if cnt >= 300000:
return -1
if sum1 == sum2:
return cnt
if sum1 < sum2:
tmp = q2.popleft()
q1.append(tmp)
sum1 += tmp
sum2 -= tmp
else:
tmp = q1.popleft()
q2.append(tmp)
sum1 -= tmp
sum2 += tmp
cnt += 1
🧠노트
Queue + Greedy! (거의 그냥 구현 문제에 가까움..)
시간초과를 방지하기 위해서,
sum() 함수를 최대한 적게 쓰고
예외처리를 중간중간 최대한 해주는 게 포인트인듯~!
🔍참고
-
'[ 알고리즘 ] > Greedy' 카테고리의 다른 글
[프로그래머스] 단속카메라 (0) | 2022.09.01 |
---|---|
[프로그래머스] 구명보트 (0) | 2022.09.01 |
[백준] 1946. 신입 사원 (0) | 2022.09.01 |
[백준] 21758. 꿀 따기 (0) | 2022.08.17 |
[백준] 16953. A → B (0) | 2022.08.17 |