๊ฐ์
์ฐ์ , ์๋ฃ ๊ตฌ์กฐ์ ๋ํด ๊ฐ๋จํ ์์๋ณด๊ณ ๋ค์ด๊ฐ๋ณด์.
์๋ฃ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ์๋ฃ ๊ตฌ์กฐ๋ ์ธํฐํ์ด์ค์ ๊ตฌํ์ผ๋ก ๋๋ ์ ์๋ค.
์ธํฐํ์ด์ค๋ ์๋ฃ ๊ตฌ์กฐ์์ ์ํธ์์ฉ ๋ฐฉ๋ฒ์ ๊ท์ ํ๋ ๊ณ์ฝ๊ณผ ๊ฐ๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ํํ ์ ์๋ ์์ ๊ณผ ํ์ํ ์ ๋ ฅ, ๊ธฐ๋๋๋ ์ถ๋ ฅ ๋ฑ์ ํฌํจํ๋ค.
์๋ฅผ ๋ค์ด, ๋์ ๋ฐฐ์ด์ ์๊ฐํด๋ณด์. ์ธํฐํ์ด์ค๋ ์ถ๊ฐ, ์ฝ์
, ์ญ์ , ์
๋ฐ์ดํธ ๋ฑ์ ์์
์ ํฌํจํ๋ค. ์ด๋ฌํ ์์
๋ค์ ๋ช
ํํ๊ฒ ์ ์๋์ด ์์ผ๋ฉฐ, ์ฌ์ฉ ์ ํน์ ๊ท์น์ ๋ฐ๋ผ์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ์์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด, .append()
๋ .push()
๊ฐ์ ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ถ๊ฐํ ์์๋ฅผ ์ธ์๋ก ๋๊ธด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ์์
์ ๋ฐํ ๊ฐ์ด ์๋ค.
๊ตฌํ์ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์ค์ ๋ก ์๋ํ๋ ์ฝ๋ ๋ถ๋ถ์ด๋ค. ๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์๊ณผ ์์ ์ํ ๋ฐฉ๋ฒ์ ์ธ๋ถ ์ฌํญ์ด ์ฌ๊ธฐ์ ์ํ๋ค. ์๋ฅผ ๋ค์ด, ๋์ ๋ฐฐ์ด์ ๊ตฌํ์๋ ๋ฆฌ์คํธ์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ํฌ๊ธฐ ๊ด๋ฆฌ, ์ญ์ ์์ ์ ์์ ์ฌ๋ฐฐ์ด ๋ฑ์ด ํฌํจ๋ ์ ์๋ค.
์๋ฃ ๊ตฌ์กฐ์ ๊ตฌํ์ ๋ณต์กํ ์ ์์ผ๋ฉฐ, ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ์กฐ์์ ํฌํจํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ธ๋ถ ์ฌํญ์ ์ฐ๋ฆฌ์๊ฒ ํฌ๊ฒ ์ค์ํ์ง ์๋ค - ์ค์ํ ๊ฒ์ ์ธํฐํ์ด์ค๋ฅผ ์ดํดํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ์ด๋ค.
์์ผ๋ก ์ฐ๋ฆฌ๋ ์๋ฃ ๊ตฌ์กฐ์ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ค๋ฃฐ ๊ฒ์ด๋ค. ๊ธฐ๋ณธ์ ์ธ ์ดํด๋ฅผ ํ๋ ๊ฒ์ ๊ฝค ๋์์ด ๋์ง๋ง, ๊ผญ ๋ชจ๋ ์ธ๋ถ ์ฌํญ์ ์ธ์ธ ํ์๋ ์๋ค. ์ฌ๊ธฐ์๋ ์์ฑ๋๋ฅผ ๋์ด๊ธฐ ์ํด ํฌํจ์ํจ ๊ฒ์ด๋ค.
๋ ์ค์ํ ๊ฒ์ ์ธํฐํ์ด์ค๋ฅผ ์ดํดํ๋ ๊ฒ์ด๋ค. ๋ชจ๋ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์๋ ์ฃผ์ ์๋ฃ ๊ตฌ์กฐ์ ๋ด์ฅ ๊ตฌํ์ด ์๋ค. ๋ฉด์ ์์๋ ์ด๋ฌํ ๋ด์ฅ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ด์ผ ํ์ง๋ง, ์ง์ ๊ตฌํํ ํ์๋ ์๋ค.
์ด ์ฅ์์๋ ํด์ ๋งต๊ณผ ์ธํธ์ ๋ํด ์ด์ผ๊ธฐํ ๊ฒ์ด๋ค. ์ด๋ค์ ํด์ฑ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค.
ํด์ ํจ์๋ ์ ๋ ฅ์ ๋ฐ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๊ณ ์ ๋ ํฌ๊ธฐ์ ์ ์๋ก ๋ณํํ๋ ํจ์์ด๋ค. ์ ๋ ฅ์ ํค๋ก ๋ถ๋ฆฌ์ฐ๋ฉฐ, ๋์ผํ ์ ๋ ฅ์ ํญ์ ๋์ผํ ์ ์๋ก ๋ณํ๋๋ค. ์์ด ์ํ๋ฒณ ๋ฌธ์๋ฅผ ํฌํจํ ๋ฌธ์์ด์ ์ ์ฉ๋๋ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
- ์ ์
total
์ ์ด๊ธฐํํ๋ค. - ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ๊ฒํ ํ๋ฉฐ, ๊ทธ ๋ฌธ์๊ฐ ์ํ๋ฒณ์์ ๋ช ๋ฒ์งธ์ ์์นํ๋์ง ํ์
ํ๋ค. ์๋ฅผ ๋ค์ด,
a
๋1
๋ฒ,c
๋3
๋ฒ,z
๋26
๋ฒ์งธ์ ํด๋นํ๋ค. - ์ด ์ซ์๋ฅผ ๋ฌธ์์ ์์น(index + 1)์ ๊ณฑํ์ฌ
total
์ ๋ํ๋ค. ์๋ฅผ ๋ค์ด,"abc"
์์b
๋ ์ํ๋ฒณ์์2
๋ฒ์งธ, ๋ฌธ์์ด์์๋2
๋ฒ์งธ์ ์์นํ๋ฏ๋กtotal
์2 * 2 = 4
๋ฅผ ์ถ๊ฐํ๋ค. - ๋ชจ๋ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ํ,
total
์ ์ต์ข ๊ฐ์ ์ป๋๋ค.
์ด ๋ฐฉ์์ ์ค์ ํด์ ํจ์์๋ ๋ค๋ฅด๋ค. ๋จ์ง ๋ฌธ์์ด์ ์ ์๋ก ๋ณํํ๋ ํ ๋ฐฉ๋ฒ์ ๋ถ๊ณผํ๋ค. total
์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ํ ๋ฒ์ ์์ ๋ง์ถ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋ฅผ ์ํด 4๋จ๊ณ๋ฅผ ์๋์ ๊ฐ์ด ์์ ํ ์ ์๋ค:
- ๋ชจ๋ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ํ,
total % x
๋ฅผ ๊ณ์ฐํ๋ค.
์ฌ๊ธฐ์ %
๋ ๋ชจ๋๋ก ์ฐ์ฐ์ ์๋ฏธํ๋ฉฐ, ์ด๋ ์ต์ข
๋ณํ๋ ๊ฐ์ด [0, x - 1]
๋ฒ์ ์์ ๋ค์ด๊ฐ ์ ์๋๋ก ํ๋ค.
ํด์ ํจ์์ ์ค์์ฑ
์ฐ๋ฆฌ๋ ๋ฐฐ์ด์ด $O(1)$์ ๋ฌด์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ์๊ณ ์๋ค. ์ฃผ์ด์ง ์์์ ์ธ๋ฑ์ค์ ๋ํด ๋ฐฐ์ด์ ๊ฐ์ ์์ ์๊ฐ ๋ด์ ์ ๊ทผํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋ค. ๋ฐฐ์ด์ ์ฃผ๋ ์ ์ฝ์ ๊ทธ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๊ณ ์ธ๋ฑ์ค๊ฐ ์ ์ ํํ์ฌ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ํด์ ํจ์๋ ์ด๋ ํ ์ ๋ ฅ๋ ์ ์๋ก ๋ณํํ ์ ์์ผ๋ฏ๋ก, ์ธ๋ฑ์ค๊ฐ ์ ์์ฌ์ผ ํ๋ค๋ ์ ์ฝ์ ํจ๊ณผ์ ์ผ๋ก ์์จ ์ ์๋ค. ํด์ ํจ์๋ฅผ ๋ฐฐ์ด๊ณผ ๊ฒฐํฉํ๋ฉด ํด์ ๋งต ๋๋ ํด์ ํ ์ด๋ธ, ๋์ ๋๋ฆฌ๋ผ๊ณ ์๋ ค์ง ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
๋ฐฐ์ด์์๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ ๋งคํํ๋ค. ๋ฐ๋ฉด ํด์ ๋งต์์๋ ํค๋ฅผ ๊ฐ์ ๋งคํํ๋ฉฐ, ํค๋ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ด ๋ ์ ์๋ค. ํด์ ๋งต์ ํค์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ์ฝ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค(์ด๋ ์ธ์ด์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์ง์นจ์ด๋ค). ๊ฐ์ ์ด๋ ํ ๊ฒ์ด๋ ๋ ์ ์๋ค.
ํด์ ๋งต์ ์๊ณ ๋ฆฌ์ฆ ๋ฉด์ ์์ ๋งค์ฐ ์ค์ํ ๊ฐ๋
์ด๋ค. ์ด๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ค์ํ ๋ฌธ์ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ฅผ $O(n)$์ผ๋ก ์ค์ด๋ ๋ฐ ํฐ ๋์์ด ๋๋ค. ๋ชจ๋ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํด์ ๋งต์ ๋ด์ฅํ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ฌ์์๋ ์ด๋ฅผ โ๋์
๋๋ฆฌโ๋ผ ๋ถ๋ฅด๋ฉฐ, ์ ์ธ์ dic = {}
์ ๊ฐ์ด ๊ฐ๋จํ๋ค. ์ด ๊ณผ์ ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ํด์ ๋งต ์ธํฐํ์ด์ค๋ฅผ ์์ ํ ์ดํดํ๊ณ ์๋ฌํ๋ ๊ฒ์ด๋ค.
์์ฝํ๋ฉด, ํด์ ๋งต์ ์์๊ฐ ์๋ ์๋ฃ ๊ตฌ์กฐ๋ก์ ํค์ ๊ฐ์ ์์ ์ ์ฅํ๋ค. ํด์ ๋งต์ $O(1)$์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ํค์ ๊ด๋ จ๋ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ณ ํค์ ์กด์ฌ ์ฌ๋ถ๋ $O(1)$์ ํ์ธํ ์ ์๋ค. ํด์ ๋งต์ ํค์ ๊ฐ์ ๋ํด์๋ ๋ฐ๋ณตํ ์ ์์ง๋ง, ๋ฐ๋ณต์ด ํน์ ํ ์์๋ฅผ ๋ฐ๋ฅด์ง๋ ์๋๋ค(์ด๋ ๊ตฌํ ๋ฐฉ๋ฒ๊ณผ ์ฌ์ฉํ๋ ์ธ์ด์ ๋ฐ๋ผ ๋ค๋ฅด๋ค).
์ ๋ ฌ๋ ์๋ฃ ๊ตฌ์กฐ๋ ์ฝ์ ์์๋ฅผ ๊ธฐ์ตํ๋ ๋ฐ๋ฉด, ์ ๋ ฌ๋์ง ์์ ์๋ฃ ๊ตฌ์กฐ๋ ์ฝ์ ์์๊ฐ ์ค์ํ์ง ์๋ค.
๋ฐฐ์ด๊ณผ์ ๋น๊ต
์๊ฐ ๋ณต์ก๋ ์ธก๋ฉด์์ ํด์ ๋งต์ ๋ฐฐ์ด์ ์๋ํ๋ค. ํด์ ๋งต์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ๋ค์ด ๋ชจ๋ $O(1)$๋ก ์ํ๋๋ค:
- ์์๋ฅผ ์ถ๊ฐํ๊ณ ๊ฐ๊ณผ ์ฐ๊ฒฐ
- ์์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ญ์
- ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธ
ํด์ ๋งต์ ๋ฐฐ์ด๊ณผ ๋์ผํ ์ ์ฉํ ์์ฑ๋ค์ ๊ฐ์ง๋ฉฐ, ๋์ผํ ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ณด์ธ๋ค:
- ์์์ ๊ธธ์ด/๊ฐ์ ์ฐพ๊ธฐ
- ๊ฐ ์ ๋ฐ์ดํธ
- ์์ ์ํ
ํด์ ๋งต์ ์ฌ์ฉํ๊ธฐ์๋ ๊ฐํธํ๋ค. ๋ง์ฝ ํค๊ฐ ์ ์์ธ ๊ฒฝ์ฐ์๋, ๊ทธ ์ต๋ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅด๋ฉด ์ผ๋ง๋ ํฐ ๋ฐฐ์ด์ด ํ์ํ์ง ๊ฒฐ์ ํ๊ธฐ ์ด๋ ต๋ค. ํด์ ๋งต์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค. ํด์ ๋งต์์๋ ํค๊ฐ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ ํ ๋ฒ์ ๋ด์์ ์ ์ ํ ํฌ๊ธฐ์ ์๋ก์ด ์ ์๋ก ๋ณํ๋๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ ํฌ๊ธฐ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค.
๊ทธ๋ฌ๋ ์ค์ ์ฌ์ฉ ์ ํด์ ๋งต์๋ ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ผ๋ฉฐ, ๋ฉด์ ์์ ์ด๋ฌํ ์ฅ๋จ์ ์ ๋ํด ๋ ผํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ํด์ ๋งต์ ๊ฐ์ฅ ํฐ ๋จ์ ์ค ํ๋๋ ์์ ์ ๋ ฅ ํฌ๊ธฐ์ ๋ํด ์ค๋ฒํค๋ ๋๋ฌธ์ ๋๋ ค์ง ์ ์๋ค๋ ๊ฒ์ด๋ค. $O(1)$ ์๊ฐ ๋ณต์ก๋๋ ์์๋ฅผ ๋ฌด์ํ๊ธฐ ๋๋ฌธ์ ๋๋๋ก ํ์ค๊ณผ ๋ค๋ฅผ ์ ์๋ค - ์ค์ ๋ก๋ $O(10)$๊ณผ ๊ฐ์ ๊ฒ์ผ ์๋ ์๋ค. ๋ชจ๋ ํค๋ ํด์ ํจ์๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ฉฐ, ์ถฉ๋๋ ๋ฐ์ํ ์ ์๋ค.
๋ํ ํด์ ํ ์ด๋ธ์ ๋ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์๋ค. ๋์ ๋ฐฐ์ด์ ์ค์ ๋ก ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด๋ก, ์ฉ๋์ ์ด๊ณผํ๋ฉด ์์ฒด์ ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ค. ํด์ ํ ์ด๋ธ๋ ๊ณ ์ ๋ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ค. ๋ฌธ์ ๋ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ ์กฐ์ ์ด ๋ ๋น์ธ๋ค๋ ๊ฒ์ด๋ค. ๋ชจ๋ ๊ธฐ์กด ํค๋ฅผ ๋ค์ ํด์ฑํด์ผ ํ๋ฉฐ, ํด์ ํ ์ด๋ธ์ ์ ์ฅ๋ ์์์ ์์ ๋นํด ํจ์ฌ ํฐ ๋ฐฐ์ด์ ์ฌ์ฉํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด, $10,000$๊ฐ ์์ดํ ์ ํ๋๋ฅผ ์ค์ ํ์ง๋ง ์ค์ ๋ก๋ $10$๊ฐ๋ง ์ ์ฅํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. $10,000$์ด ๋๋ฌด ํฌ๋ค๊ณ ์ฃผ์ฅํ ์๋ ์๊ฒ ์ง๋ง, ๋ค์ ํ ์คํธ ์ผ์ด์ค์์ $100,000$๊ฐ ์์๋ฅผ ์ ์ฅํด์ผ ํ๋ค๋ฉด ์ด๋จ๊น? ์์ ์ ํ์ํ ์์์ ์๋ฅผ ๋ชจ๋ฅผ ๋, ๋ฐฐ์ด์ด ํฌ๊ธฐ ์กฐ์ ๊ณผ ๊ณต๊ฐ ๋ญ๋น์ ์์ด ๋ ์ ์ฐํ๋ค๋ ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก, ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ผ ๋๋ ํด๋น ํจ์์์ ์ ์๋ ๋ณ์๋ค๋ง ๊ณ ๋ คํ๋ค. ์๋ฅผ ๋ค์ด, ํด์ ๋งต ์ฐ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ $O(1)$์ด๋ผ๊ณ ํ ๋, ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ๊ณ ๋ คํ๋ ๊ฒ์ ํด์ ๋งต์ ํฌ๊ธฐ์ธ $n$์ด๋ค. ํ์ง๋ง ์ด๋ฌํ ํํ์ ์คํด์ ์์ง๊ฐ ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด์ ํด์ ๋งต์ ๋ฃ๋ ๋ฐ์๋ $O(m)$ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์ $m$์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ํ๋ธ๋ค. ๋ฐ๋ผ์ ์์ ์๊ฐ ์ฐ์ฐ์ด๋ผ๋ ํํ์ ํด์ ๋งต์ ํฌ๊ธฐ์๋ง ์๋์ ์ผ๋ก ์ ์ฉ๋๋ ๊ฒ์ด๋ค.
์ถฉ๋
์๋ก ๋ค๋ฅธ ํค๋ค์ด ๊ฐ์ ์ ์๋ก ๋ณํ๋๋ ๊ฒ์ ์ถฉ๋์ด๋ผ ํ๋ค. ์ถฉ๋์ ๊ด๋ฆฌํ์ง ์์ผ๋ฉด ์ด์ ํค๋ค์ด ๋ฎ์ด์ฐ์ฌ์ ธ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ํ์ด ์๋ค. ์ถฉ๋์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ผ๋, ์ฌ๊ธฐ์๋ ์ฒด์ด๋์ด๋ผ ๋ถ๋ฆฌ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค.
์์ง ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ํด ์ ๋ชจ๋ฅด๋๋ผ๋ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค. ๋งํฌ๋ ๋ฆฌ์คํธ๋ ๋ค์ ์ฅ์์ ์์ธํ ๋ค๋ฃฐ ์์ ์ด๋ค. ํ์ฌ๋ ์ด๋ฅผ ๋ฐฐ์ด๊ณผ ์ ์ฌํ ์๋ฃ ๊ตฌ์กฐ๋ก ์๊ฐํ๋ฉด ์ถฉ๋ถํ๋ค.
์ฒด์ด๋์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด์ ๋งต์ ๋ฐฐ์ด ๋ด์ ์ง์ ์์๋ฅผ ์ ์ฅํ๋ ๋์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๋ค. ์ด ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ ธ๋๋ ํค์ ๊ฐ์ ๋ชจ๋ ๋ณด๊ดํ๋ค. ์ถฉ๋์ด ๋ฐ์ํ๋ฉด, ์ถฉ๋ํ ํค-๊ฐ ์์ด ๋งํฌ๋ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋๋ค. ์ดํ ์ด๋ฌํ ํค-๊ฐ ์์ ์ ๊ทผํ๋ ค ํ ๋๋ ํด๋น ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ํค๊ฐ ์ผ์นํ ๋๊น์ง ํ์ํ๋ค.
์ด ๋ถ๋ถ์ด ํผ๋์ค๋ฌ์ธ ์ ์์ผ๋, ๋ชจ๋ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํด์ ๋งต ๊ตฌํ์ ์ถฉ๋์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค. ํด์ ๋งต์ ๋ด๋ถ ์๋ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋ฉด์ ์์ ํน์ ์ง๋ฌธ์ ๋ฐ๊ฑฐ๋ ํด์ ๋งต ์ฌ์ฉ์ ์ฅ๋จ์ ์ ๋ ผ์ํ ์ ์์ผ๋ฏ๋ก ์ค์ํ์ง๋ง, ์ด๋ฌํ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค.
์ถฉ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ ์ด ๊ณผ์ ์ด ์๊ฐ์ด ์์๋์ด ํด์ ๋งต์ ์ ๋ฐ์ ์ธ ์๋์ ํจ์จ์ฑ์ ์ ํ์ํค๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. ๊ทธ๋ ๋ค๋ฉด ํด์ ๋งต์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ์ถฉ๋์ ์ต์ํํ ์ ์์๊น? ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํด์ ํ ์ด๋ธ์ ๋ฐฐ์ด ํฌ๊ธฐ์ ๋ชจ๋๋ฌ์ค๊ฐ ์์์ฌ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ํ ๊ท๋ชจ์ ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค:
- 10,007
- 1,000,003
- 1,000,000,007
์ธํธ
์ธํธ๋ ํด์ ํ ์ด๋ธ๊ณผ ๋งค์ฐ ๋น์ทํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ์ด ๊ตฌ์กฐ๋ ํค๋ฅผ ์ ์๋ก ๋ณํํ๊ธฐ ์ํด ํด์ฑ์ด๋ผ๋ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. ์ธํธ์ ํด์ ํ ์ด๋ธ์ ์ฃผ๋ ์ฐจ์ด๋ ์ธํธ๊ฐ ํค๋ฅผ ๋ค๋ฅธ ๊ฐ์ ๋งคํํ์ง ์๋๋ค๋ ์ ์ด๋ค. ์์์ ์กด์ฌ ์ฌ๋ถ๋ง์ ํ์ธํ๋ ๊ฒฝ์ฐ์ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํธ๋ฆฌํ๋ค. ์ธํธ์์๋ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๊ณ , ์์๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ $O(1)$์ ํ์ธํ ์ ์๋ค.
์ธํธ์ ๊ดํด ์์๋์ด์ผ ํ ์ค์ํ ์ฌํญ์ ๋น๋ ์๋ฅผ ์ถ์ ํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ๋ง์ฝ ์ด๋ค ์ธํธ์ ๋์ผํ ์์๋ฅผ $100$๋ฒ ์ถ๊ฐํ๋ค๋ฉด, ์ฒซ ๋ฒ์งธ ์ถ๊ฐ์์ ์์๊ฐ ์ธํธ์ ๋ค์ด๊ฐ๊ณ ์ดํ์ $99$๋ฒ ์ถ๊ฐ์์๋ ์๋ฌด๋ฐ ์์ ๋ ์ด๋ฃจ์ด์ง์ง ์๋๋ค.
๋ฐฐ์ด์ ํด์ ๋งต์ ํค๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
ํด์ ๋งต์์ ํค๋ก ์ฌ์ฉ๋๊ธฐ ์ํด์๋ ๋ณดํต ๋ถ๋ณ์ฑ์ด ์๊ตฌ๋๋ค. ํ์ง๋ง ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์์๊ฐ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ํด์ ๋งต์ ํค๋ก ์ฌ์ฉํ ์ ์์๊น?
์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ๋ฐฐ์ด์ ๋ณํ์ง ์๋ ๊ณ ์ ํ ํค๋ก ๋ฐ๊พธ๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค. ์๋ฅผ ๋ค์ด, ํ์ด์ฌ์์๋ ํํ์ด ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก, ๋ฐฐ์ด์ ํํ๋ก ๋ฐ๊พธ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ์ด๋ฅผ ์ํด tuple(arr)
๊ฐ์ ๋ช
๋ น์ ์ฌ์ฉํ๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด์ ์์๋ฅผ ํน์ ๋ฌธ์๋ก ๊ตฌ๋ถํ์ฌ ๋ฌธ์์ด๋ก ๋ง๋๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ์ ์๋ค ์ฌ์ด์ ์ผํ๋ฅผ ๋ฃ์ด [1, 51, 163]
๋ฅผ "1,51,163"
๊ณผ ๊ฐ์ด ๋ง๋๋ ๊ฒ์ด๋ค. C++ ๊ฐ์ ์ธ์ด๋ ์์ฒด์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํค๋ฅผ ์ง์ํ๊ธฐ๋ ํ๋ค.
์ธํฐํ์ด์ค ๊ฐ์ด๋
๋ค์์ C++๊ณผ Rust์์ ์ฌ์ฉ๋๋ ํด์ ๋งต ์ธํฐํ์ด์ค์ ๋ํ ์ค๋ช ์ด๋ค:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// ์ ์ธ: C++์ ๋ค์ํ ๊ตฌํ์ ์ง์ํ์ง๋ง, ์ฌ๊ธฐ์๋ std::unordered_map์ ์ฌ์ฉํ๋ค.
// ํค์ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ ์ง์ ํ๋ค.
unordered_map<int, int> hashMap;
// ์ด๊ธฐ๊ฐ์ ํฌํจํ์ฌ ์ด๊ธฐํํ๊ณ ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค:
unordered_map<int, int> hashMap = {{1, 2}, {5, 3}, {7, 2}};
// ํค์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ค:
hashMap.find(1) != hashMap.end(); // ์ฐธ
hashMap.find(9) != hashMap.end(); // ๊ฑฐ์ง
// ์ฃผ์ด์ง ํค๋ก ๊ฐ์ ์ ๊ทผํ๋ ค๋ฉด, ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
hashMap[5]; // 3
// ํค๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ ๋๋, ๋ฐฐ์ด๊ณผ ์ ์ฌํ๊ฒ ๋๊ดํธ๋ฅผ ์ฌ์ฉํ๋ค.
// ํค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด ํด๋น ๊ฐ์ด ์
๋ฐ์ดํธ๋๋ค.
hashMap[5] = 6;
// ํค๊ฐ ์์ง ์กด์ฌํ์ง ์๋๋ค๋ฉด, ํค์ ๊ฐ์ ์์ด ์ฝ์
๋๋ค.
hashMap[9] = 15;
// ํค๋ฅผ ์ญ์ ํ๋ ค๋ฉด .erase() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
hashMap.erase(9);
// ํด์ ๋งต์ ํฌ๊ธฐ๋ฅผ ์์๋ด๋ ค๋ฉด
hashMap.size(); // 3
// ํค์ ๊ฐ์ ์์ ์ํํ๋ ค๋ฉด ๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ค.
// .first๋ ํค๋ฅผ, .second๋ ๊ฐ์ ๋ฐํํ๋ค.
for (auto const& pair: hashMap) {
cout << pair.first << " " << pair.second << endl;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// ์ ์ธ ๋ฐ ์ด๊ธฐํ: Rust์์๋ ํ์
์ ๋ช
์์ ์ผ๋ก ์ ์ธํด์ผ ํ๋ค.
// ์ฌ๊ธฐ์๋ i32 ํ์
์ ํค์ ๊ฐ์ ๊ฐ๋ HashMap์ ์์ฑํ๋ค.
let mut hash_map: HashMap<i32, i32> = HashMap::new();
// ์ด๊ธฐ๊ฐ์ ๊ฐ์ง HashMap์ ์์ฑํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ:
let mut hash_map: HashMap<i32, i32> = [(1, 2), (5, 3), (7, 2)].iter().cloned().collect();
// ํค์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด contains_key ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค:
println!("{}", hash_map.contains_key(&1)); // true ์ถ๋ ฅ
println!("{}", hash_map.contains_key(&9)); // false ์ถ๋ ฅ
// ์ฃผ์ด์ง ํค๋ก ๊ฐ์ ์ ๊ทผํ๋ ค๋ฉด, get ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ unwrapํ๋ค.
// ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๋๋นํด unwrap_or ๋ฉ์๋๋ก ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ค.
println!("{}", hash_map.get(&5).unwrap_or(&-1)); // 3 ์ถ๋ ฅ
// ํค์ ๊ฐ์ ์ถ๊ฐํ๊ฑฐ๋ ์
๋ฐ์ดํธํ๋ ค๋ฉด insert ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
hash_map.insert(5, 6);
// ํค๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ, ์ ํค-๊ฐ ์์ด ์ฝ์
๋๋ค.
hash_map.insert(9, 15);
// ํค๋ฅผ ์ญ์ ํ๋ ค๋ฉด remove ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
hash_map.remove(&9);
// ํด์ ๋งต์ ํฌ๊ธฐ๋ฅผ ์์๋ด๋ ค๋ฉด len ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
println!("{}", hash_map.len()); // 3 ์ถ๋ ฅ
// ํค์ ๊ฐ์ ์์ ์ํํ๋ฉฐ ์ถ๋ ฅํ๋ ค๋ฉด for ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ค.
for (key, value) in &hash_map {
println!("{} {}", key, value);
}
์ถ์ฒ: Leetcode