ํ์ด์ฌ์ collections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ๊ทธ ์ค ๋ง์ด ์ฌ์ฉ๋๋ deque์ Counter์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํ์ด์ฌ์์ ํ๋ฅผ ๊ตฌํํ๋๋ฐ ์์ด Queue๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง ์ผ๋ฐ์ ์ธ ํ๋ฅผ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋๋๋ค. ๋ฐ๋ผ์ deque๋ฅผ ์ด์ฉํ์ฌ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์คํธ ๊ฐ์ฅ์์ ์์๋ฅผ ์ฝ์
ํ ๋ ์๊ฐ ๋ณต์ก๋๋ O(N)์
๋๋ค. ํ์ง๋ง deque์ appendleft()๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ผ ์ ์์ต๋๋ค.
| |
๋ฆฌ์คํธ |
deque |
| ๊ฐ์ฅ ์์ชฝ์ ์์ ์ถ๊ฐ(appendleft(x)) |
O(N) |
O(1) |
| ๊ฐ์ฅ ๋ค์ชฝ์ ์์ ์ถ๊ฐ(append(x)) |
O(1) |
O(1) |
| ๊ฐ์ฅ ์์ชฝ์ ์๋ ์์ ์ ๊ฑฐ(leftpop()) |
O(N) |
O(1) |
| ๊ฐ์ฅ ๋ค์ชฝ์ ์๋ ์์ ์ ๊ฑฐ(pop()) |
O(1) |
O(1) |
deque๋ก ์ ์ธํ ๋ฆฌ์คํธ์์๋ ์ผ๋ฐ์ ์ธ ๋ฆฌ์คํธ์์ ์ฌ์ฉํ ์ ์๋ ์ธ๋ฑ์ฑ, ์ฌ๋ผ์ด์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง, ๋ฆฌ์คํธ์ ์์ ํน์ ๋ ๋ถ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ์ฌ ์ญ์ ํ ๋๋ ์๋นํ ํจ์จ์ ์
๋๋ค.
from collections import deque
data = deque([2, 3, 4])
data.append(5)
data.appendleft(1)
print(data)
print(list(data))
data.pop()
data.popleft()
print(data)
print(list(data))
collections ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Counter๋ ๋ฑ์ฅ ํ์๋ฅผ ์ธ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์์๋ณ ๋ฑ์ฅ ํ์๋ฅผ ์ธ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ์งง์ ์์ค์ฝ๋๋ก ์ด๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'blue', 'green', 'red'])
print(counter['blue'])
print(counter['red'])
print(dict(counter))