Logo
Hyunsu Blog
this

๐Ÿ“†Published :Mar 30, 2024 โ€ข

๐Ÿ“†Updated :Mar 30, 2024 โ€ข

โ˜•๏ธ2min

2022 KAKAO TECH INTERNSHIP ๋‘ ํ ํ•ฉ ๊ฐ™๊ฒŒ ๋งŒ๋“ค๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

๊ธธ์ด๊ฐ€ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ๋ฅผ ๊ณจ๋ผ ์›์†Œ๋ฅผ ์ถ”์ถœ(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

Hi, I'm Hyunsu ๐Ÿ‘‹

Profile Image

์•ˆ๋…•ํ•˜์„ธ์š”. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ฃผํ˜„์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ’๋ถ€ํ•˜๊ณ  ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋Š” ์ผ์— ๋ฟŒ๋“ฏํ•จ์„ ๋Š๋‚๋‹ˆ๋‹ค.

์˜ต์‹œ๋””์–ธ(Obsidian)์—์„œ ํ˜„์žฌ ๋ธ”๋กœ๊ทธ๋กœ ํ•˜๋‚˜์”ฉ ๊ธ€์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์— ์žˆ์–ด์š”. โ˜•๏ธ ๐Ÿ‘ฉโ€๐Ÿ’ป โ›ท

Github on ViewReach Me Out