Counter
Counter
๋ Python์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธcollections
๋ชจ๋์์ ์ ๊ณตํ๋ ํด๋์ค- ๋ฆฌ์คํธ๋ ๋ฌธ์์ด ๋ฑ์ iterable ๊ฐ์ฒด์์ ๊ฐ ์์์ ๋น๋(ํ์)๋ฅผ ์ฝ๊ฒ ๊ณ์ฐํ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ๋ก, ๋น๋ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ํนํ๋ ๋์
๋๋ฆฌ๋ผ๊ณ ์๊ฐํ ์ ์์
Counter์ ๊ธฐ๋ณธ ๊ฐ๋
Counter
๋ ์ฃผ์ด์ง iterable์ ์
๋ ฅ๋ฐ์, ๊ฐ ์์๋ฅผ ํค(key)๋ก, ํด๋น ์์์ ๋น๋(๊ฐ์)๋ฅผ ๊ฐ(value)์ผ๋ก ์ ์ฅํ๋ ๋์
๋๋ฆฌ ํํ์ ๊ฐ์ฒด๋ฅผ ์์ฑ
from collections import Counter
# ๋ฆฌ์คํธ์์ ๊ฐ ์์์ ๋น๋ ๊ณ์ฐ
votes = [1, 2, 2, 3, 3, 3]
counter = Counter(votes)
print(counter)
# ์ถ๋ ฅ: Counter({3: 3, 2: 2, 1: 1})
๋์ ๋๋ฆฌ์ ์ ์ฌํ๊ฒ ๋์
Counter
๊ฐ์ฒด๋ ๋์ ๋๋ฆฌ์ ์ ์ฌํ๊ฒ ๋์ํจ. ํค๋ฅผ ์ฌ์ฉํด ํน์ ์์์ ๋น๋๋ฅผ ์กฐํํ๊ฑฐ๋, ์ ๊ฐ์ ์ถ๊ฐํ ์ ์์
counter = Counter([1, 2, 2, 3, 3, 3])
print(counter[2])
# 2์ ๋น๋ ์ถ๋ ฅ: 2
counter[2] += 1
# 2์ ๋น๋ ์ฆ๊ฐ
print(counter[2])
# 2์ ๋น๋ ์ถ๋ ฅ: 3
์ฃผ์ ๋ฉ์๋
1. values()
- counter.values()๋ ๊ฐ ํ๋ณด์ ํฌํ ์๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํํด์ค
max_vote = max(counter.values())
### 2. **`items()`** - counter.items()๋ ๊ฐ ํ๋ณด์ ํฌํ ์์ ์์ ๋ฐํ ```python #enumerate ์ธ ๋์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ res = [i for i, value in counter.items() if value == max_vote] ```
### 3. **`most_common(n)`**
- ๋น๋ ์๊ฐ ๋์ ์์ผ๋ก ์์
n
๊ฐ์ ์์์ ๋น๋๋ฅผ ๋ฐํ
counter = Counter([1, 2, 2, 3, 3, 3])
print(counter.most_common(1))
# ์ถ๋ ฅ: [(3, 3)] # ๊ฐ์ฅ ๋น๋๊ฐ ๋์ 3์ด 3๋ฒ ๋ฑ์ฅ
### 4. **`del`** - `del` ํค์๋๋ฅผ ์ฌ์ฉํด ํน์ ํค๋ฅผ ์ ๊ฑฐํ ์ ์์
`counter = Counter([0, 1, 2, 0, 3])
del counter[0] # 0์ ๋น๋๋ฅผ ์ ๊ฑฐ
print(counter)
# ์ถ๋ ฅ: Counter({1: 1, 2: 1, 3: 1})`
์ฐธ๊ณ ์์ : ๋ฐฑ์ค 20113๋ฒ ๊ธด๊ธ ํ์
import sys
from collections import Counter
n = int(sys.stdin.readline())
vote = list(map(int, sys.stdin.readline().split()))
# vote๋ง ์ฌ์ฉํด์ enumerate๋ก ํ๋ฉด 0 ๊ฐ ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์
# 0์ ํฌํ๋ฅผ ๋ฐ์ง ์์ ๊ฒฝ์ฐ์ด๋ฏ๋ก 0์ ์ ์ธํ ํ๋ณด๋ค์ ํฌํ ์๋ฅผ ์นด์ดํธ
counter = Counter(vote)
if 0 in counter:
del counter[0]
# ํฌํ ์๊ฐ ๋น์ด์์ผ๋ฉด "skipped"
if not counter:
print("skipped")
else:
# counter.values()๋ ๊ฐ ํ๋ณด์ ํฌํ ์๋ฅผ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํํด์ค
# max๋ฅผ ์ฌ์ฉํด ์ต๋ค ๋ํ์ ๊ณ์ฐ
max_vote = max(counter.values())
# counter.items()๋ ๊ฐ ํ๋ณด์ ํฌํ ์์ ์์ ๋ฐํ
# enumerate ์ธ ๋์ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ
res = [i for i, value in counter.items() if value == max_vote]
if len(res) > 1: # ๋์ ์ ์์ ๋
print("skipped")
else: # ์ต๋ค ๋ํ์ ์ ์ผ
print(res[0])
์ด ์ฝ๋์์ Counter
์ ์ฌ์ฉ ๋ชฉ์
- ํ๋ณด๋ณ ํฌํ ์๋ฅผ ๊ณ์ฐ:
vote
๋ฆฌ์คํธ์ ์ ์ฅ๋ ๊ฐ ํ๋ณด ID์ ๋น๋๋ฅผ ๊ณ์ฐ - ํฌํ๋ฅผ ๋ฐ์ง ์์ ๊ฒฝ์ฐ(๊ฐ์ด 0)๋ฅผ ์ ์ธ: ํ๋ณด ID๊ฐ ์๋
0
๊ฐ์ ๋ฌด์ - ์ต๋ค ๋ํ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ํ์ฉ:
Counter
๊ฐ์ฒด๋ฅผ ํตํด ๊ฐ ํ๋ณด์ ๋ํ ์๋ฅผ ์ ์ฅํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต๋ค ๋ํ์์ ๋์ ์ฌ๋ถ๋ฅผ ํ๋จ
์ฝ๋ ํ๋ฆ
- ์
๋ ฅ ์ฒ๋ฆฌ
n
์ ํฌํ ์,vote
๋ ํฌํ ๋ฐ์ดํฐ(ํ๋ณด ID ๋ชฉ๋ก)
- ํฌํ ์ ๊ณ์ฐ
Counter(vote)
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ณด ID์ ํฌํ ์๋ฅผ ๊ณ์ฐ0
์ ์ ๊ฑฐํ์ฌ ํฌํํ์ง ์์ ๊ฐ์ ๋ฌด์
- ๊ฒฐ๊ณผ ํ๋ณ
max_vote
๋ฅผ ์ด์ฉํด ์ต๋ค ๋ํ์๋ฅผ ๊ณ์ฐres
๋ฅผ ์ด์ฉํด ์ต๋ค ๋ํ ํ๋ณด ๋ฆฌ์คํธ๋ฅผ ์์ฑ- ๋์ ์๊ฐ ์์ผ๋ฉด โskippedโ๋ฅผ ์ถ๋ ฅ
- ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ผํ ์ต๋ค ๋ํ์์ ID๋ฅผ ์ถ๋ ฅ