코딩 테스트/프로그래머스

Lv2. 두 큐 합 같게 만들기

  • -
728x90
반응형

문제 보기 : 두 큐 합 같게 만들기

 

프로그래머스

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

programmers.co.kr


문제

  • 정답률 : 54%


작성 코드

from collections import deque
def solution(queue1, queue2):
    answer = 0
    deque1 = deque(queue1) ; deque2 = deque(queue2)
    l = len(deque1) + len(deque2)
    d1 = sum(queue1) ; d2 = sum(queue2)
    
    while d1!=d2:
        if d1 > d2:
            d = deque1.popleft() ; deque2.append(d)
            d1 -= d ; d2 += d
        elif d2 > d1:
            d = deque2.popleft() ; deque1.append(d)
            d2 -= d ; d1 += d
        answer += 1
        
        if answer > 2*l+1:
            return -1
    return answer

풀이

문제가 잘 이해가 안되는거같아서 예제로 이해하려고 했다.

[3, 2, 7, 2] [4, 6, 5, 1] 14 16
[3, 2, 7, 2, 4,] [ 6, 5, 1, ] 18 12
[2, 7, 2, 4,] [ 6, 5, 1, 3, ] 15 15 
[1, 2, 1, 2] [1, 10, 1, 2] 6 14
[1, 2, 1, 2, 1, ] [10, 1, 2] 7 13
[1, 2, 1, 2, 1, 10, ] [1, 2] 17 3
[2, 1, 2, 1, 10, ] [1, 2, 1, ] 16 4
[1, 2, 1, 10, ] [1, 2, 1, 2, ] 14 6
[2, 1, 10, ] [1, 2, 1, 2, 1, ] 13 7
[1, 10, ] [1, 2, 1, 2, 1, 2, ] 11 9
[10, ] [1, 2, 1, 2, 1, 2, 1, ] 10 10

왼쪽 리스트 값의 합이 오른쪽 리스트 합보다 더 크면 왼쪽 리스트에서 popleft해서 오른쪽 리스트에 더하고,
반대일 경우 반대로 똑같이 시행한다. 그리고 그렇게 한 횟수만큼 count

popleft()를 쓰기 위해 두 리스트 다 deque로 설정했다. 그리고 이제 두 deque의 합이 동일해질 때까지 while문이 돌아가도록 코드를 짜면 되는데, 단순 sum으로 하면 시간초과가 나버려서 다른 방법을 찾아봤다.그리고 찾아낸 방법이 초반에 아예 값을 구해놓고 시작하는거.
어느 하나 옮기기 전에 deque들의 더한 값을 미리 구해놓고 deque1에서 뺐다가 deque2에는 append해두고 (이건 어쩔 수 없이 해야함..) d2에는 값 자체를 더하는 방법을 찾았다. (resp. deque2, deque1, d1)
이렇게 하니 시간초과도 나지 않고 바로 통과했다.

320x100
728x90

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

Lv3. 기지국 설치  (0) 2024.10.04
Lv2. 피로도  (0) 2024.10.04
Lv2. 소수 찾기  (0) 2024.10.01
Lv2. 큰 수 만들기  (0) 2024.09.30
Lv1. 햄버거 만들기  (0) 2024.09.30
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.