[프로그래머스 | Python] 두 큐 합 같게 만들기

게으른 완벽주의자·2023년 2월 2일
0

프로그래머스

목록 보기
34/83
post-custom-banner

프로그래머스_두 큐 합 같게 만들기

queue에서 값을 옮기는 횟수 제한을 거는 것이 중요하다
queue의 길이x3 번 만큼 값을 옮긴다면 서로의 값을 모두 교환했다는 의미이고 그러고도 합이 같아지지 않는다면 목표 달성이 불가능하다는 뜻이므로 -1를 return 한다

그리고 매 if조건마다 sum을 따로 해주면 테스트케이스에서 시간초과가 난다
sum1,sum2를 미리 구하고 조건에 따라 더하거나 빼줘야한다
왜 아냐고? 나도 알고싶지 않았다..내 코드가 잘못된 줄 흑흑

from collections import deque
def solution(queue1, queue2):
    answer = 0
    queue1, queue2 = deque(queue1), deque(queue2)
    sum1, sum2 = sum(queue1), sum(queue2)
    
    if sum1==sum2:
        return 0
    elif (sum1+sum2)%2==1:
        return -1
    
    #1,2의 값이 서로 모두 교환되고도(3*queue길이 동안) 합이 같아지지 않는다면 목표 달성 불가능
    #합이 큰 쪽에서 작은 쪽으로 값을 이동시켜야 동일한 합이 나오게 만들 수 있다
    for _ in range(3*len(queue1)):
        if sum1 > sum2:
            sum1 -= queue1[0]
            sum2 += queue1[0]
            queue2.append(queue1.popleft())
            answer+=1
        elif sum1 < sum2:
            sum1 += queue2[0]
            sum2 -= queue2[0]
            queue1.append(queue2.popleft())
            answer+=1
        else:
            return answer
    
    return -1
profile
데이터를 공부하고 있습니다
post-custom-banner

0개의 댓글