https://school.programmers.co.kr/learn/courses/30/lessons/118667
문제 접근
- 핵심은 총합이 큰 queue에서 작은 queue로 요소가 이동해야 함
- 반복문을 돌면서 한쪽 큐로 옮겨보고, 합해보고, 다시 비교해 보고 같아지거나 최대 카운트 벗어나면 break
시간 초과
시간 초과에 대해 고민을 했는데..
- sum() 함수 연산을 최소화 (변수에 저장하고 연산하는 식으로)
- 최대 연산 수를, 하나의 queue가 싹 빠지고 다시 원래 queue로 돌아오는 경우라 생각해서 len(queue1) * 3으로 설정
- 양쪽 queue의 합이 같아지면 break
- 반복문 들어가기 전에 처음부터 정답을 return 할 수 있는지 코드 추가
코드
from collections import deque
def solution(queue1, queue2):
answer = -1
queue1, queue2 = deque(queue1), deque(queue2)
sum_que1, sum_que2 = sum(queue1), sum(queue2)
target = sum_que1 + sum_que2
if sum_que1 == sum_que2:
return 0
if target % 2 != 0:
return -1
cnt = 0
max_cnt = len(queue1) * 3
for i in range(max_cnt):
if sum_que1 < sum_que2:
value = queue2.popleft()
queue1.append(value)
sum_que1 += value
sum_que2 -= value
cnt += 1
elif sum_que2 < sum_que1:
value = queue1.popleft()
queue2.append(value)
sum_que2 += value
sum_que1 -= value
cnt += 1
else:
break
return cnt if cnt != max_cnt else -1
'Development > PS' 카테고리의 다른 글
[DFS] 프로그래머스 level 2 타켓넘버 Python 풀이 (0) | 2023.12.05 |
---|---|
[완전탐색] 프로그래머스 level 2 소수 찾기 Python 풀이 (0) | 2023.11.14 |
[2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기 Python 풀이 (0) | 2023.11.13 |
[Hash] 프로그래머스 Level 2 전화번호 목록 Python 풀이 (0) | 2023.11.11 |
[Hash] 프로그래머스 level 1 완주하지 못한 선수 python 풀이 (1) | 2023.11.09 |