๋ฌธ์ ์ค๋ช
๊ธธ์ด๊ฐ ๊ฐ์ ๋ ๊ฐ์ ํ๊ฐ ์ฃผ์ด์ง๋๋ค. ํ๋์ ํ๋ฅผ ๊ณจ๋ผ ์์๋ฅผ ์ถ์ถ(pop)ํ๊ณ , ์ถ์ถ๋ ์์๋ฅผ ๋ค๋ฅธ ํ์ ์ง์ด๋ฃ๋(insert) ์์ ์ ํตํด ๊ฐ ํ์ ์์ ํฉ์ด ๊ฐ๋๋ก ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค. ์ด๋ ํ์ํ ์์ ์ ์ต์ ํ์๋ฅผ ๊ตฌํ๊ณ ์ ํฉ๋๋ค. ํ ๋ฒ์ pop๊ณผ ํ ๋ฒ์ insert๋ฅผ ํฉ์ณ์ ์์ ์ 1ํ ์ํํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
ํ๋ ๋จผ์ ์ง์ด๋ฃ์ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ ๋๋ค. ์ด ๋ฌธ์ ์์๋ ํ๋ฅผ ๋ฐฐ์ด๋ก ํํํ๋ฉฐ, ์์๊ฐ ๋ฐฐ์ด ์์ชฝ์ ์์์๋ก ๋จผ์ ์ง์ด๋ฃ์ ์์์์ ์๋ฏธํฉ๋๋ค. ์ฆ, pop์ ํ๋ฉด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์ถ์ถ๋๋ฉฐ, insert๋ฅผ ํ๋ฉด ๋ฐฐ์ด์ ๋์ ์์๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ [1, 2, 3, 4]๊ฐ ์ฃผ์ด์ก์ ๋, pop์ ํ๋ฉด ๋งจ ์์ ์๋ ์์ 1์ด ์ถ์ถ๋์ด [2, 3, 4]๊ฐ ๋๋ฉฐ, ์ด์ด์ 5๋ฅผ insertํ๋ฉด [2, 3, 4, 5]๊ฐ ๋ฉ๋๋ค.
๋ค์์ ๋ ํ๋ฅผ ๋ํ๋ด๋ ์์์ ๋๋ค.
queue1 = [3, 2, 7, 2] queue2 = [4, 6, 5, 1] ๋ ํ์ ๋ด๊ธด ๋ชจ๋ ์์์ ํฉ์ 30์ ๋๋ค. ๋ฐ๋ผ์, ๊ฐ ํ์ ํฉ์ 15๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
queue2์ 4, 6, 5๋ฅผ ์์๋๋ก ์ถ์ถํ์ฌ queue1์ ์ถ๊ฐํ ๋ค, queue1์ 3, 2, 7, 2๋ฅผ ์์๋๋ก ์ถ์ถํ์ฌ queue2์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ queue1์ [4, 6, 5], queue2๋ [1, 3, 2, 7, 2]๊ฐ ๋๋ฉฐ, ๊ฐ ํ์ ์์ ํฉ์ 15๋ก ๊ฐ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์์ ์ 7๋ฒ ์ํํฉ๋๋ค. queue1์์ 3์ ์ถ์ถํ์ฌ queue2์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ queue2์์ 4๋ฅผ ์ถ์ถํ์ฌ queue1์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ queue1์ [2, 7, 2, 4], queue2๋ [6, 5, 1, 3]๊ฐ ๋๋ฉฐ, ๊ฐ ํ์ ์์ ํฉ์ 15๋ก ๊ฐ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ์์ ์ 2๋ฒ๋ง ์ํํ๋ฉฐ, ์ด๋ณด๋ค ์ ์ ํ์๋ก ๋ชฉํ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ ํ์ ์์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์์ ์ ์ต์ ํ์๋ 2์ ๋๋ค.
๊ธธ์ด๊ฐ ๊ฐ์ ๋ ๊ฐ์ ํ๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด queue1, queue2๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๊ฐ ํ์ ์์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์์ ์ ์ต์ ํ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์. ๋จ, ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๊ฐ ํ์ ์์ ํฉ์ ๊ฐ๊ฒ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ, -1์ return ํด์ฃผ์ธ์.
์ ํ์ฌํญ 1 โค queue1์ ๊ธธ์ด = queue2์ ๊ธธ์ด โค 300,000 1 โค queue1์ ์์, queue2์ ์์ โค 109 ์ฃผ์: ์ธ์ด์ ๋ฐ๋ผ ํฉ ๊ณ์ฐ ๊ณผ์ ์ค ์ฐ์ ์ค๋ฒํ๋ก์ฐ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก long type ๊ณ ๋ ค๊ฐ ํ์ํฉ๋๋ค. ์ ์ถ๋ ฅ ์ queue1 queue2 result [3, 2, 7, 2][4, 6, 5, 1] 2 [1, 2, 1, 2][1, 10, 1, 2] 7 [1, 1][1, 5] -1
๋ฌธ์ ํ์ด
๊ฐ ํ์ ์์์ ํฉ์ ๋๊ฐ์ด ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์์ ์ ์ต์ ํ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋๊ฐ์ ํ๋ฅผ ์์ ๋๋ก ์ถ์ถ ํ๋ค๊ณ ํ์ผ๋, ๋ ๊ฐ์ ํ์ ํฉ์ด ์๋ก ๊ฐ์ ์ง๊ธฐ ์ํด ํ์ FIFO ๊ตฌ์กฐ๋ฅผ ์ด์ฉ ํ์ฌ ํ ๊ฐ์ฉ ์ถ์ถ ํ์ฌ ๋ค๋ฅธ ํ์ ๋ฃ์ด ๊ฐ๋ฉด์ ๋ ๊ฐ์ ํ๊ฐ ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ฉด ๋๋ค.
๊ทธ๋ผ ์ด๋ค ํ๋ถํฐ ํน์ ์ด๋ค ์กฐ๊ฑด์ผ ๋ ํ๋ฅผ ์ถ์ถ ํ๊ณ ๋ฃ์ด์ผ ํ ์ง์ ๋ํ ๊ธฐ์ค์ ์ฐพ์์ผ ํ๋ค. ๋ฌธ์ ์ ์์์ ๋์จ ์์ ๋๋ก ํ๋ค๋ฉด ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ ์ผ๋ก ํฉ์ด ๋ ํฐ ํ์์ ์์ ํ๋ก ๊ฐ์ ๋๊ฒจ ๊ฐ๋ฉด์ ํ๊ฒ ๋ ๊ฒฝ์ฐ ์ต์ ํ์๋ฅผ ๊ตฌํ ์ ์๋ค.
if(sum_1<sum_2):
#๋ ๋ฒ์งธ ํ์์ ์ฒซ ๋ฒ์งธ ํ๋ก ๊ฐ์ ๋๊ฒจ์ฃผ๊ธฐ
extract= dq_2.popleft()
sum_2-=extract
dq_1.append(extract)
sum_1+=extract
else:
#์ฒซ ๋ฒ์งธ ํ์์ ๋ ๋ฒ์งธ ํ๋ก ๊ฐ ๋๊ฒจ์ฃผ๊ธฐ
extract_another = dq_1.popleft()
sum_1-=extract_another
dq_2.append(extract_another)
sum_2+= extract_another
๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ ์์๋ ์๋๋ ์ผ์ด์ค๋ ์๊ฑฐ๋ฒ์ ์ฌ์ฉ ํ์ฌ ์ ์ธ ์ํค๋ ๋ก์ง์ ๋จผ์ ์์ฑ ํ๋ค.
if((sum_1 +sum_2)%2!=0):
return -1
๊ทธ๋ฆฌ๊ณ ํ๋ฅผ ์ถ์ถ ํ๊ณ ๋ฃ๋ ๋ฐ๋ณต์ ์ธ์ ๊น์ง ํด์ผ ํ๋์ง ์๊ฐ ํ๋ค. ์ฒซ ๋ฒ์งธ ๋ก๋ ๋ ํ์ ํฉ์ด ๊ฐ์ ์ง๋ฉด ๋๋ค.
๋ง์ฝ ๋ ํ์ ํฉ์ด ๊ฐ์ ์ง์ง ์๋ ๋ค๋ฉด? -1์ ๋ฆฌํด ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ ํ์ ํฉ์ด ๊ฐ์ ์ง์ง ์๋ ๋ค๋ ๊ฒ์ ๊ตฌํ๊ธฐ ์ํด ๋ช๋ฒ์ ์ถ์ถ ํ๊ณ ๋ฃ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ ๊น? ๋ด๊ฐ ์ฒ์ ์๋ํ ์ ๊ทผ ์์๋ ํ๋์ ํ๋ผ๋ ๋น ํ๊ฐ ๋๋ฉด ๋ ์ด์ ๋น๊ตํ ํ๊ฐ ์์ด -1์ ๋ฆฌํด ํ๋๋ฐ, ์๊ฐ ์ด๊ณผ๊ฐ ๋๋ค.
ํ๋์ ํ๋ผ๋ ๋น์ด ์์ง ์์ ์ํ์์ ๋์ ํฉ์ด ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์ด ๊ณ์ loop ๋ฅผ ๋ฐ๋ณตํ๊ณ ์๋ ๊ฒ์ด๋ค. ๋ค๋ฅธ ์กฐ๊ฑด์ผ๋ก loop ๋ฅผ ๋๋ด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ ๋ ๊ฐ์ ํ๋ฅผ ๊ฐ์ง๊ณ ๋นผ๊ณ ๋ฃ๊ธฐ๋ฅผ ๋ฐ๋ณต์ผ๋ก ํ๋๋ฐ ๊ฒฐ๊ตญ ๋นผ๋ ๋์์ ๋๊ฐ์ ํ์์ ๋ชจ๋ ์ผ์ด๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฃ๋ ๋์๋ ๋ ๊ฐ์ ํ์์ ์ผ์ด๋ ์ ์๋ค. ๊ทธ๋ผ ์ต๋ ๋ฐ๋ณต ํ์๋ ๋ ํ์ ๊ธธ์ด์ ํฉ * 2 ๊ฐ ๋๋ค.
iterator_cnt = 0
iterator_max = (len(queue1)+len(queue2))*2
while(iterator_cnt<iterator_max):
์ ์ฒด ์ฝ๋:
from collections import deque
def solution(queue1, queue2):
answer = 0
dq_1 = deque(queue1)
dq_2 = deque(queue2)
sum_1 = sum(dq_1)
sum_2 = sum(dq_2)
if((sum_1 +sum_2)%2!=0):
return -1
iterator_cnt = 0
iterator_max = (len(queue1)+len(queue2))*2
while(iterator_cnt<iterator_max):
if(sum_1 == sum_2):
break
# ๊ฐ๊ฐ์ ํ์ sum์ด balance๋ฅผ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ๋ ํฐ์ชฝ์์ -> ์์์ชฝ์ผ๋ก ์์๋ฅผ ์ค๋ค.
if(sum_1<sum_2):
#2์์ ๋นผ๊ธฐ
extract= dq_2.popleft()
sum_2-=extract
dq_1.append(extract)
sum_1+=extract
answer+=1
#
else:
#1์์ ๋นผ๊ธฐ
extract_another = dq_1.popleft()
sum_1-=extract_another
dq_2.append(extract_another)
sum_2+= extract_another
answer+=1
iterator_cnt+=1
if(sum(dq_1)!=sum(dq_2)):
return -1
return answer