DevYoon

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ (Python) ๋ณธ๋ฌธ

PS/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ (Python)

gimewn 2023. 2. 19. 00:02

link ๐Ÿ”— https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์ฒ ์ˆ˜๋Š” ๋กค์ผ€์ดํฌ๋ฅผ ๋‘ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ผ์„œ ๋™์ƒ๊ณผ ํ•œ ์กฐ๊ฐ์”ฉ ๋‚˜๋ˆ  ๋จน์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋กค์ผ€์ดํฌ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ† ํ•‘๋“ค์ด ์ผ๋ ฌ๋กœ ์˜ฌ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ ์ˆ˜์™€ ๋™์ƒ์€ ๋กค์ผ€์ดํฌ๋ฅผ ๊ณตํ‰ํ•˜๊ฒŒ ๋‚˜๋ˆ ๋จน์œผ๋ ค ํ•˜๋Š”๋ฐ, ๊ทธ๋“ค์€ ๋กค์ผ€์ดํฌ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋กค์ผ€์ดํฌ ์œ„์— ์˜ฌ๋ ค์ง„ ํ† ํ•‘๋“ค์˜ ์ข…๋ฅ˜์— ๋” ๊ด€์‹ฌ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž˜๋ฆฐ ์กฐ๊ฐ๋“ค์˜ ํฌ๊ธฐ์™€ ์˜ฌ๋ ค์ง„ ํ† ํ•‘์˜ ๊ฐœ์ˆ˜์— ์ƒ๊ด€์—†์ด ๊ฐ ์กฐ๊ฐ์— ๋™์ผํ•œ ๊ฐ€์ง“์ˆ˜์˜ ํ† ํ•‘์ด ์˜ฌ๋ผ๊ฐ€๋ฉด ๊ณตํ‰ํ•˜๊ฒŒ ๋กค์ผ€์ดํฌ๊ฐ€ ๋‚˜๋ˆ„์–ด์ง„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋กค์ผ€์ดํฌ์— 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})