๋ฌธ์
์ ์ถ๋ ฅ ์์
ํ์ด
ํต์ฌ์ ์์ชฝ์์ ์ ๊ทผํ ์ ์๋ deque์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ฐ๋ณต๋ฌธ์ ๋น ์ ธ๋์ค๋ ์์ ์ ์ ํด์ฃผ๋ ๊ฒ์ด์๋ค. ๋ฐ๋ณต๋ฌธ ํ์ถ ์กฐ๊ฑด์ ๋์น๋ฉด ๋ฌด์กฐ๊ฑด ์ค๋ต์ด ๋์ค๊ธฐ ๋๋ฌธ!
โป ๊ธฐ๋ณธ ์์ด๋์ด: ์์ ์ด ํฉ์ด ํฐ ๋ฆฌ์คํธ์์ ์์ ๋ฆฌ์คํธ๋ก ์์๋ฅผ ์ฎ๊น
1๏ธโฃ ํน์ TC์์ ์คํจํ ์ฝ๋(11๋ฒ, 28๋ฒ)
1. ๊ฐ queue๋ฅผ deque์ผ๋ก ๋ฐ๊พธ๊ณ ๋ฆฌ์คํธ ์ด ํฉ์ ๋ฏธ๋ฆฌ ๊ตฌํด๋๋ค.
2. sum(queue1), sum(queue2)์ ๋น๊ตํ๋ฉด์ ํฐ ๊ณณ์์ ์์ ๊ณณ์ผ๋ก ๊ฐ ์ด๋ → ํฐ ๊ณณ์์ popleft()
3. ๊ฐ์ด ์ด๋ํ ๋๋ง๋ค cnt += 1
4. ๋ ๋ฆฌ์คํธ์ ํฉ์ด ๊ฐ์์ง๋ฉด break
์์ ๋ก์ง๋๋ก ํ๊ณ ํฌ๊ฒ ์๋ชป๋ ๋ถ๋ถ์ด ์๋ค๊ณ ์๊ฐํ๋๋ฐ ํน์ TC์์ ๊ณ์ ์คํจํ๊ธธ๋ ๊ณ ๋ฏผ์ ๊ฝค๋ ํ๋ค. '์ง๋ฌธํ๊ธฐ'์์ ์ฐพ์ ๋ฐ๋ก๋ก ํต๊ณผํ ์ ์์๋ค.
from collections import deque
def solution(queue1, queue2):
q1 = deque(queue1)
q2 = deque(queue2)
q1_sum = sum(q1)
q2_sum = sum(q2)
total = (q1_sum+q2_sum)//2
cnt = 0
# ์ด๋ป๊ฒ ํด๋ total์ ๋ง๋ค ์ ์๋ ๊ฒฝ์ฐ
if max(q1) > total or max(q2) > total:
return -1
while q1 and q2:
if q1_sum > q2_sum:
popped = q1.popleft()
q1_sum -= popped
q2_sum += popped
cnt += 1
elif q1_sum < q2_sum:
popped = q2.popleft()
# ์์ ๊ฒฝ์ฐ ์
์ถ๋ ฅ ์์ 2๋ฒ์์ 6 ์ถ๋ ฅ. 7 ๋๊ธฐ ์ ์ queue๊ฐ ๋น๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒจ์ ๋ฐฉ์ง์ฉ
q1.append(popped)
q1_sum += popped
q2_sum -= popped
cnt += 1
else:
break
return cnt
2๏ธโฃ ํต๊ณผ ์ฝ๋
์คํจ ์ฝ๋์ ๊ฐ์ฅ ํฌ๊ฒ ๋ค๋ฅธ ์ ์ ๋ฐ๋ณต๋ฌธ ํ์ถ ์กฐ๊ฑด์ด ํ๋ ๋ ์ถ๊ฐ๋๋ค๋ ๊ฒ์ด๋ค.
[๋ฐ๋ก]
queue1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 10]
queue2 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
์์ ๋ฆฌ์คํธ๋ค๋ก VSCODE์์ ํ ์คํธํ๋๋ cnt ๊ฐ์ด 20 ์ ๋์๋ ๊ฒ ๊ฐ๋ค. append๋ฅผ q1์์๋ง ํ๊ธฐ ๋๋ฌธ์ q2๊ฐ ๋น๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฉด while๋ฌธ์ ๋ฐ๋ก ๋น ์ ธ๋์ค๊ธฐ ๋๋ฌธ์ cnt ๊ฐ์ด ์ด์ํ๊ฒ ๋์์ ์คํจํ๋ ์ผ์ด์ค์๋ค.
์๋ 2๊ฐ์ง๋ฅผ ์ถ๊ฐํด์ ์ฝ๋๋ฅผ ์์ ํ๋ค.
โ q2์๋ append ์ถ๊ฐ → cnt๊ฐ ์ ๋๋ก ์นด์ดํธ ๋๊ธฐ ์ ์ queue๊ฐ ๋น๊ฒ ๋์ด while๋ฌธ์ ํ์ถํ์ง ์๋๋ก ํ๊ธฐ ์ํ ๋ชฉ์
โก โญ cnt ๊ฐ์ด ๊ณ์ ์ฆ๊ฐํด len(queue1)*4์ ๊ฐ์์ง ๊ฒฝ์ฐ -1 return โญ
๐ len(queue1)*4 ์๋ฏธ
queue1๊ณผ queue2์ ์์๊ฐ ๋ฐ๋๋ ๊ณผ์ ์ด len(queue1)*2๋งํผ ์งํ๋๋ฉด queue1๊ณผ queue2์ ์์๊ฐ ์์ ํ ๋ฐ๋๊ฒ ๋๋ค. ๊ทธ ์ํ์์ ์์๋ฅผ ๋ค์ len(queue1)*2๋งํผ ๋ฐ๊พธ๋ฉด ์ด๊ธฐ ์ํ์ ๋๊ฐ์์ง๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋ ๋ฆฌ์คํธ์ ์ด ํฉ์ด ๊ฐ์์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ค๊ฐ์ ํฉ์ด ๊ฐ์์ง๋ ๊ตฌ๊ฐ์ด ์์ด์ while๋ฌธ์ ๋น ์ ธ๋์ค์ง ๋ชปํ๊ณ ๊ณ์ ์์๋ง ๋ฐ๊พธ๋ค๊ฐ ๋ฐ๊พผ ํ์๊ฐ len(queue1)*4์ ๊ฐ์์ง๋ฉด -1์ ๋ฆฌํดํ๋ค.
from collections import deque
def solution(queue1, queue2):
q1 = deque(queue1)
q2 = deque(queue2)
q1_sum = sum(q1)
q2_sum = sum(q2)
total = (q1_sum+q2_sum)//2
cnt = 0
if max(q1) > total or max(q2) > total:
return -1
while q1 and q2:
if q1_sum > q2_sum:
popped = q1.popleft()
q2.append(popped)
q1_sum -= popped
q2_sum += popped
cnt += 1
elif q1_sum < q2_sum:
popped = q2.popleft()
q1.append(popped)
q1_sum += popped
q2_sum -= popped
cnt += 1
else:
break
######## ์ถ๊ฐํ ๋ถ๋ถ ########
if cnt == len(q1)*4:
cnt = -1
break
return cnt
'Problem Solving > BOJ & Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 1018๋ฒ: ์ฒด์คํ ๋ค์ ์น ํ๊ธฐ (0) | 2023.11.05 |
---|---|
[Programmers] ๋ฌธ์์ด ๋๋๊ธฐ (0) | 2022.12.12 |
[BOJ] 2493๋ฒ: ํ (0) | 2022.07.18 |
[BOJ] 2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ (0) | 2022.03.23 |
[BOJ] 11256๋ฒ: Jelly Bean (0) | 2022.02.03 |