์ฐ์ต๋ฌธ์ Lv2. ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ
๋ฌธ์
์ฒ ์๋ ๋กค์ผ์ดํฌ๋ฅผ ๋ ์กฐ๊ฐ์ผ๋ก ์๋ผ์ ๋์๊ณผ ํ ์กฐ๊ฐ์ฉ ๋๋ ๋จน์ผ๋ ค๊ณ ํฉ๋๋ค. ์ด ๋กค์ผ์ดํฌ์๋ ์ฌ๋ฌ๊ฐ์ง ํ ํ๋ค์ด ์ผ๋ ฌ๋ก ์ฌ๋ ค์ ธ ์์ต๋๋ค. ์ฒ ์์ ๋์์ ๋กค์ผ์ดํฌ๋ฅผ ๊ณตํํ๊ฒ ๋๋ ๋จน์ผ๋ ค ํ๋๋ฐ, ๊ทธ๋ค์ ๋กค์ผ์ดํฌ์ ํฌ๊ธฐ๋ณด๋ค ๋กค์ผ์ดํฌ ์์ ์ฌ๋ ค์ง ํ ํ๋ค์ ์ข ๋ฅ์ ๋ ๊ด์ฌ์ด ๋ง์ต๋๋ค. ๊ทธ๋์ ์๋ฆฐ ์กฐ๊ฐ๋ค์ ํฌ๊ธฐ์ ์ฌ๋ ค์ง ํ ํ์ ๊ฐ์์ ์๊ด์์ด ๊ฐ ์กฐ๊ฐ์ ๋์ผํ ๊ฐ์ง์์ ํ ํ์ด ์ฌ๋ผ๊ฐ๋ฉด ๊ณตํํ๊ฒ ๋กค์ผ์ดํฌ๊ฐ ๋๋์ด์ง ๊ฒ์ผ๋ก ์๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋กค์ผ์ดํฌ์ 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
์ ์ถ๋ ฅ ์
topping | result |
[1, 2, 1, 3, 1, 4, 1, 2] | 2 |
[1, 2, 3, 1, 4] | 0 |
ํ์ด
1๋ฒ์งธ ํ์ด : ์๊ฐ ์ด๊ณผ ์๋ฌ๋จ
from collections import Counter
def solution(topping):
answer = 0
for i in range(len(topping)):
a = Counter(topping[0:i])
b = Counter(topping[i:len(topping)])
if len(a) == len(b):
answer += 1
return answer
2๋ฒ์งธ ํ์ด : ๋ค๋ฅธ ์ฌ๋ ํ์ด ์ฐธ๊ณ
- Split ์ฌ์ฉํ์ง ์๊ธฐ
- ์ฒ ์ ๋ฐฐ์ด์ ๋ค ๋ด์ ๋๊ณ ํ๋์ฉ ๋นผ๋ฉด์ ๋์ ๋ฐฐ์ด์ ๋ฃ๊ณ ๋น๊ต
- ์ฒ ์ ์นด์ดํฐ ๋ฐฐ์ด์ value๊ฐ 0์ด ๋๋ฉด ๋ฐฐ์ด์์ ์ ๊ฑฐ → del ํจ์ ์ฌ์ฉ
- ์ฒ ์ ๋ฐฐ์ด์ ๊ธธ์ด์ ๋์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๊ฐ์ผ๋ฉด ๊ณตํํ๊ฒ ๋๋ ์ง ๊ฒ์ด๋ฏ๋ก answer + 1 ํด์ค๋ค
from collections import Counter
def solution(topping):
answer = 0
chul = Counter(topping)
bro = set()
for i in topping:
chul[i] -= 1
bro.add(i)
if chul[i] == 0:
del chul[i]
if len(chul.keys()) == len(bro):
answer += 1
return answer