❕ 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/118667
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❕ 내 풀이 방법
1. Queue1, Queue2 각각의 sum을 비교
2. Sum 값이 큰 큐에서 작은 큐로 첫 번째 원소 보내기
3. Sum 값이 같을 때까지 1-2번 반복
4. Queue1과 Queue2의 모든 원소를 바꿨다 원래대로 돌아오는 len(Queue1)*3 번 만큼 1-2를 반복해도 sum 값이 같지 않다면 -1 return
❕ 첫 번째 코드(실패)
from collections import deque
def solution(queue1, queue2):
answer = -2
length = len(queue1)
queue1 = deque(queue1)
queue2 = deque(queue2)
cnt=0
while True:
if sum(queue1) > sum(queue2):
temp = queue1.popleft()
queue2.append(temp)
cnt += 1
elif sum(queue1) < sum(queue2):
temp = queue2.popleft()
queue1.append(temp)
cnt += 1
else:
break
if cnt > length*3:
cnt = -1
break
answer = cnt
return answer
총 test case 30개중에 63점? 인가 밖에 못맞아서 도대체 왜인가 했더니..
While 문이나 for문 안에서 sum 함수(라이브러리) 를 계속 쓰면 시간초과가 난다고 한다..
(queue1,queue2의 개수가 30만개까지라..)
그래서 sum 변수를 각각 while문 밖에서 구한다음 변수로 썼더니 시간초과 안나고 잘 통과했다
❕ 전체 코드
from collections import deque
def solution(queue1, queue2):
answer = 0
length = len(queue1)
queue1 = deque(queue1)
queue2 = deque(queue2)
sum1 = sum(queue1)
sum2 = sum(queue2)
while True:
if answer > length*3:
return -1
if sum1 > sum2:
sum1 -= queue1[0]
sum2 += queue1[0]
queue2.append(queue1.popleft())
elif sum1 < sum2:
sum1 += queue2[0]
sum2 -= queue2[0]
queue1.append(queue2.popleft())
else:
return answer
answer+=1
'알고리즘 > 카카오 기출' 카테고리의 다른 글
[프로그래머스/python] 메뉴 리뉴얼 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.04.11 |
---|---|
[프로그래머스/Python] 순위 검색 - 2021 KAKAO BLIND RECRUITMENT (0) | 2022.04.11 |
[프로그래머스/Python] 오픈채팅방 - 2019 KAKAO BLIND RECRUITMENT (0) | 2022.02.20 |
[프로그래머스/C++] 문자열 압축 - 2020 KAKAO BLIND RECRUITMENT (0) | 2022.02.19 |
[프로그래머스/C++] 크레인 인형뽑기 게임 - 2019 카카오 개발자 겨울 인턴십 (0) | 2022.02.18 |