์์ ์ ๋ชฉ์ ์ฌ์ค ๋ณธ์ธ์๊ฒ ํ๋ ๋ง์ด๋ค ๐
์ด ๊ธ์์๋ Python์์ queue ๊ตฌํ ์, ๋ฐ๋์ collections.deque๋ฅผ ์ฌ์ฉํด์ผํ๋ ๊ตฌ์กฐ์ ์ธ ์ด์ ์ ๋๋ถ์ด, ์ ์ฝ๋ ๊ตฌํ ์์ '์ฝ๋์ ์ฌ์ฉํ๋ ์ฝ๋์ ๊ตฌ์กฐ'๊น์ง ์ฐพ์ ์ ๋ฆฌํ๊ฒ ๋์๋์ง์ ๋ํ ์ฌ์ค์ด ํฌํจ๋์ด ์๋ค.
[์ฌ์ค] ์ด ๊ธ๊ณผ ๊ฐ์ ๊ณ ๋ฏผ์ด ์ค์ํ๋ค๊ณ ๋๋ผ๊ฒ ๋ ๊ณ๊ธฐ
1. list๋ก queue๋ฅผ ๊ตฌํํ ์์ ์ตํ
ํ๋ก๊ทธ๋๋จธ์ค 2022 KAKAO TECH INTERNSHIP ๋ ํ ํฉ ๊ฐ๊ฒ ๋ง๋ค๊ธฐ ๋ฌธ์ ์์ ๋ฐํ์ ์๋ฌ+๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ ์ ์์๋ค. (2023.11.10)
ํ๊ต ์ ๋ฐฐ๊ฐ ๋ณด๊ณ , collection.deque๋ฅผ ์ฐ์ธ์๋ผ๋ ๋ง์ ํด์ฃผ์ จ๋๋ฐ
'์, deque ๋ญ ๊ทธ๊ฑฐ ํ์ด์ฌ์์ list ๋์ ์ฐ๋ ๋น ๋ฅธ ์๋ฃํ์ด ์์์ง' ๋ผ๋ ์๊ฐ์ด ๋ค๋ฉด์ list๋ฅผ deque๋ก ๋ฐ๊พธ๋ ๊ฒ๋ง์ผ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์๋ ๊ฒฝํ์ด ์๋ค.
(์์ฃผ ํผ์์ ์ธ ์์ค์ ์ดํด์ด๋ค. ์ด๋ ๊ฒ ์ดํดํ๊ณ ์ฝ๋ฉํ๋ฉด ์ฝ๋๊ฐ ๋๊ธฐ ์ญ์์ด๋ค. ์ฒ์ ๊ณต๋ถํ ๋๋ ๋ฐ์๋ค์ฌ์ผํ๋ ์ง์์ ์์ด ๋ง์์ ์ด๋ ๊ฒ ์ดํดํ ์๋ ์๊ฒ ์ง๋ง, ์ง์์ ์ผ๋ก ๊ณต๋ถํ์ฌ ๋๋๋ ๊ทผ์์ ์ผ๋ก ํ์ด๋ ์ฝ๋๋ฅผ ์ดํดํด์ผ ํ๋ค.)
2. ๊ทธ๋ฃน๋ฐ์ด ์จ๋ผ์ธ ์ฑ์ฉ ์ค๋ช ํ์์ Corca์ ์ธ์ฌ์
๋, ๊ฐ์ธ์ ์ผ๋ก ๋งค์ฐ ์กด๊ฒฝํ๋ ํ๊ต ์ ๋ฐฐ๋์ด ์ด์ํ๋ ๊ทธ๋ฃน๋ฐ์ด์ ์จ๋ผ์ธ ์ฑ์ฉ ์ค๋ช ํ๋ฅผ ๊ฐ ์ ์ด ์๋ค. (2023.11.17)
์ฌ์ ์ ์ฒญ์ ํ์ง ์์๋๋ฐ๋ ๋ค์ด๊ฐ ์ ์๊ฒ ํด์ฃผ์ ์ ๋ ๊ฐ์ฌํ๋ค...๐ฅน
์ต๊ทผ ์ธ๊ณต์ง๋ฅ ๊ธฐ๋ฐ์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ์ ๋ค์ด๊ฐ๊ณ ์ถ๋ค๋ ์ด๋ง์ด ์๊ฒจ์, ๊ธฐ์ ๋ฆฌ์คํธ๋ฅผ ๋ณด๋ค๊ฐ Corca๋ฅผ ์๊ฒ ๋์๋ค. ๊ผญ AI Researcher ์ง๊ตฐ์ด ์๋๋๋ผ๋ ๊ฒฝํ ํด๋ดค๋ FE์์์ ๋ฐ์ดํฐ ์์ง ํ์ดํ๋ผ์ธ์ ๋ฉ์ธ์ผ๋ก ํ๋ฉด์ AI ๋ถ๋ค๊ณผ ๊ฐ์ด ๊ณต๋ถ๋ฅผ ํด๋ณด๊ณ ์ถ์ ๋ง์?!
๊ทธ๋ ๊ฒ ๊ฐ๋ณ๊ฒ ์ฑ์ฉ ์ค๋ช ํ๋ฅผ ๋ฃ๊ฒ ๋์๋๋ฐ, Corca ๋ฟ๋ง ์๋๋ผ ์คํํธ์ ๋ค ์ค์์๋ ์์ง ๊ธฐ์ ์ด๋ผํ ๊น ์ค๋ ฅ์๋ ๋ถ๋ค๋ง ๋ชจ์ฌ์๋ค๋ ์ธ์์ ๊ฐํ๊ฒ ๋ฐ์ผ๋ฉด์, Corca๋ ์ ๋ง ํฉ๋ฅํ๊ณ ์ถ์ ๋ง์์ด ๊ตด๋์ฒ๋ผ ์๊ธฐ๋ ๋ฉ์ง ๊ธฐ์ ์ด์๋ค.
์ผ๋จ, ํ์๋ค ๋ชจ๋ ์์ธ๊ณผํ๊ณ ๋ ๋ช ๋ฌธ๋์์ธ ๊ฒ์ ์ฐจ์นํ๋๋ผ๋ ๊ฐ๊ด์ ์ผ๋ก ์ธ๊ณ์ ์ธ AI Cimpetition์์ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ง์ด ๋ด๊ณ ์์๊ณ , AI field์ ๋ํ ๊น์ ์ดํด ์์ด๋ ๋ถ๊ฐ๋ฅํ ๊ฒ์ด์๋ค.
CTO๋ถ๊ป์ ๋ฐํ๋ฅผ ๋งก์ผ์ จ๋๋ฐ ๊ณ์ํด์ ๊ฐ์กฐํ๋ ๊ฒ์ด, ์ ๊ฐ๋ฐ์ง๊ตฐ+๊ธฐํ์ง๊ตฐ ํฌํจํด์ '์ ๊ฐ์ถ์ด์ง ํ๋ ์์ํฌ๋ฅผ ๊ทธ๋ฅ ์ฌ์ฉํ์ง ๋ง๊ณ , ๊ทธ ์๋ฆฌ๋ฅผ ์ถฉ๋ถํ ์ดํดํด์ ํธ๋ฌ๋ธ ์ํ ์ด๋ ์ฑ๋ฅ ๊ฐ์ ์ ์ด๋ฃฌ ๊ฒฝํ์๋ ๋ถ๋ค๊ณผ ์ผํ๊ณ ์ถ๋ค.'๋ผ๋ ๊ฒ์ด์๋ค.
์์ฆ ์ค์ณ์ง๋๊ฐ๋ ๋์ ์ง์ ์ , ๋ฅ๋ ฅ์ ์ ๋ฌธ์ฑ์ ์ด๋ป๊ฒ ์์์ผํ ๊น, ํนํ GIST ์ฌํ์์ผ๋ก์ ์ฐจ๋ณํ๋ ์ ์๋ ๊ฒ์ ๋ฌด์์ผ๊น ์๊ฐ์ด ๋ค์๊ธ ๋ค๋ฉด์ ์ํ๋ ๋ ๊ณต๋ถํจ๊ณผ ๋์์, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ง์๊ฐ์ง์ Corca์ ์ธ์ฌ์์ฒ๋ผ ์ก์๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
์ฌ๊ธฐ๊น์ง ์์ผ๋ก deque๋ฅผ ํฌํจํด์ ์๋ฆฌ์ ์ผ๋ก ์ดํดํ ์ํ์์ ์ฝ๋๋ฅผ ์ง์ผ๊ฒ ๋ค๋ ๋ค์ง์ด์๋ค.
[๋ณธ๋ก ] list vs. deque
๋จผ์ , queue๋ผ๋ ์๋ฃํ์ ๋ํด ์ตํ ์๊ณ ์์๋ค.
data๋ฅผ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ์ธ, ์๋ฃ๊ตฌ์กฐ์์ ๋ฑ์ฅํ๋ ๊ฐ๋ ์ผ๋ก stack์ ํ์ ์ ์ถ๊ณผ ๋๋น๋๋ ์ ์ ์ ์ถ ๊ตฌ์กฐ์ด๋ค.
queue๋ฅผ ์ค์ ๋ก ์ฝ๋์์ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํจ์๋ ์ผ๋ฐ ํ์ด์ฌ ๊ธฐ์ค append์ pop(0)์ด๋ค. queue์ ์๋กญ๊ฒ data๋ฅผ ์ ๋ ฅํ ๋๋ append๋ก list์ ๋ง์ง๋ง ์์๋ก ๋ถ์ด๊ณ , ์ ์ ์ ์ถ์ด๋ฏ๋ก pop(0)์ผ๋ก list์ ๊ฐ์ฅ ์์ ์์๋ฅผ ๋๋ค.
๋ฌธ์ ๊ฐ ๋๋ ์ ์ pop(0)์ธ๋ฐ, [๋งํฌ]์ ๋ฐ๋ฅด๋ฉด pop(last)๋ฅผ ์ ์ธํ pop(intermediate)๋ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)์ธ ๊ฒ์ด๋ค. ๋ฐ๋ฉด Python ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ collections์ deque.popleft()๋ O(1)์ด๋ค.
์ด๋ฌํ ์ฐจ์ด์ ์, list๋ dynamic array, deque๋ doubled linked list์ธ ๊ฒ์์ ๋ฐ์ํ๋ค.
list๋ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ element์ reference๋ฅผ ์ ์ฅ๋๋ค.
๋ฐ๋ผ์ pop(0)๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ, ๊ฐ reference๊ฐ ์์ผ๋ก ํ ์นธ์ฉ ๋น๊ฒจ์ง๊ฒ๋๋ฉด์ n๋ฒ์ ์ํ์ด ํ์ํ๊ฒ ๋๋ค.
ํํธ, deque์ ๊ตฌ์กฐ์ธ double-linked list๋ ๊ฐ ์์๊ฐ ์์ ์ ์ , ํ ์์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์, popleft()๋ฅผ ์คํํ๋ฉด ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์์ ๋ ๋ฒ์งธ ์์ ๊ฐ์ ์ฐ๊ฒฐ๋ง ๋์ด์ฃผ๋ฉด popleft() ํจ์ ์คํ์ด ์๋ฃ๋๋ค.
[์ถ๊ฐ] Python ๋ด๋ถ ๊ตฌ์กฐ๋ผ๋ ์๋ก์ด ์ธ๊ณ
์ด ๊ธ์ ์์ฑํ๋ฉด์ ์ฐธ๊ณ ํ ๊ธ๋ค์ ๊น์ด๊ฐ ์ ๊ฐ๊ฐ์ด์๋๋ฐ,
ํนํ ๋๋ฌด ์ธ์๊น์๋ ๊ธ์ด CPython์ด๋ผ๊ณ , Python์ ๊ตฌํ C ์ฝ๋๋ฅผ ๋ถ์ํ์ฌ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ์๋ฆฌ์ฆ๋ค์ด์๋ค.
๋ด ์ค๋ ฅ์ด ์ถฉ๋ถํ ์ฑ์ฅ ๊ถค๋์ ์ฌ๋์ ๋... ๋น์ทํ ํ๋์ ํด๋ณด๊ณ ์ถ๋ค.
+ ๋ํด์ Cython, Jython, PyPy... ใทใท ์ ์ ํผ๋ํ๋ค.