DevYoon
[ํ๋ก๊ทธ๋๋จธ์ค] ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ (Python) ๋ณธ๋ฌธ
link ๐ https://school.programmers.co.kr/learn/courses/30/lessons/132265
๋ฌธ์ ์ค๋ช
์ฒ ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๋ ์กฐ๊ฐ์ผ๋ก ์๋ผ์ ๋์๊ณผ ํ ์กฐ๊ฐ์ฉ ๋๋ ๋จน์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋กค์ผ์ดํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ํ ํ๋ค์ด ์ผ๋ ฌ๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ์ฒ ์์ ๋์์ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋ ๋จน์ผ๋ ค ํ๋๋ฐ, ๊ทธ๋ค์ ๋กค์ผ์ดํฌ์ ํฌ๊ธฐ๋ณด๋ค ๋กค์ผ์ดํฌ ์์ ์ฌ๋ ค์ง ํ ํ๋ค์ ์ข ๋ฅ์ ๋ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ์๋ฆฐ ์กฐ๊ฐ๋ค์ ํฌ๊ธฐ์ ์ฌ๋ ค์ง ํ ํ์ ๊ฐ์์ ์๊ด์์ด ๊ฐ ์กฐ๊ฐ์ ๋์ผํ ๊ฐ์ง์์ ํ ํ์ด ์ฌ๋ผ๊ฐ๋ฉด ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๊ฐ ๋๋์ด์ง ๊ฒ์ผ๋ก ์๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋กค์ผ์ดํฌ์ 4๊ฐ์ง ์ข ๋ฅ์ ํ ํ์ด ์ฌ๋ ค์ ธ ์๋ค๊ณ ํฉ์๋ค. ํ ํ๋ค์ 1, 2, 3, 4์ ๊ฐ์ด ๋ฒํธ๋ก ํ์ํ์ ๋, ์ผ์ดํฌ ์์ ํ ํ๋ค์ด [1, 2, 1, 3, 1, 4, 1, 2] ์์๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ๋ง์ฝ ์ธ ๋ฒ์งธ ํ ํ(1)๊ณผ ๋ค ๋ฒ์งธ ํ ํ(3) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด ๋กค์ผ์ดํฌ์ ํ ํ์ [1, 2, 1], [3, 1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ฒ ์๊ฐ [1, 2, 1]์ด ๋์ธ ์กฐ๊ฐ์, ๋์์ด [3, 1, 4, 1, 2]๊ฐ ๋์ธ ์กฐ๊ฐ์ ๋จน๊ฒ ๋๋ฉด ์ฒ ์๋ ๋ ๊ฐ์ง ํ ํ(1, 2)์ ๋ง๋ณผ ์ ์์ง๋ง, ๋์์ ๋ค ๊ฐ์ง ํ ํ(1, 2, 3, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ด ์๋๋๋ค. ๋ง์ฝ ๋กค์ผ์ดํฌ์ ๋ค ๋ฒ์งธ ํ ํ(3)๊ณผ ๋ค์ฏ ๋ฒ์งธ ํ ํ(1) ์ฌ์ด๋ฅผ ์๋ฅด๋ฉด [1, 2, 1, 3], [1, 4, 1, 2]๋ก ๋๋๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฒ ์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 3)์, ๋์๋ ์ธ ๊ฐ์ง ํ ํ(1, 2, 4)์ ๋ง๋ณผ ์ ์์ผ๋ฏ๋ก, ์ด๋ ๊ณตํํ๊ฒ ๋๋์ด์ง ๊ฒ์ ๋๋ค. ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๋ฅผ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง ์ผ ์ ์์ต๋๋ค. ์์ ๋กค์ผ์ดํฌ๋ฅผ [1, 2, 1, 3, 1], [4, 1, 2]์ผ๋ก ์๋ผ๋ ๊ณตํํ๊ฒ ๋๋ฉ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋์ง ๋ชปํ ์๋ ์์ต๋๋ค.
๋กค์ผ์ดํฌ์ ์ฌ๋ ค์ง ํ ํ๋ค์ ๋ฒํธ๋ฅผ ์ ์ฅํ ์ ์ ๋ฐฐ์ด topping์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ์๋ฅด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ topping์ ๊ธธ์ด ≤ 1,000,000
- 1 ≤ topping์ ์์ ≤ 10,000
from collections import Counter
def solution(topping):
answer = 0
me = Counter(topping)
brother = set()
for top in topping:
# ๋ด ๋์
๋๋ฆฌ์์ ํด๋น ํ ํ ๊ฐ์ 1๊ฐ ๋นผ์ฃผ๊ธฐ
me[top] -= 1
# ๋์ set์ ์ถ๊ฐ
brother.add(top)
# ๋ง์ฝ ๋ด ๋์
๋๋ฆฌ์์ 0๊ฐ๊ฐ ๋ ํ ํ์ด ์๋ค๋ฉด ์ ๊ฑฐ
if me[top] == 0:
me.pop(top)
# ๋์ ๋์์ ํ ํ ๊ฐ์๊ฐ ๊ฐ์ผ๋ฉด answer ++
if len(me) == len(brother):
answer += 1
return answer
๐ฅ Counter?
- ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ์ ๋ ํ์ฉํ ์ ์๋ collections ๋ชจ๋์ ํด๋์ค
from collections import Counter
topping = [1, 2, 1, 3, 1, 4, 1, 2]
print(Counter(topping)) # Counter({1: 4, 2: 2, 3: 1, 4: 1})