๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

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

sssbin 2023. 2. 7. 14:19

 

https://school.programmers.co.kr/learn/courses/30/lessons/132265

 

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

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

programmers.co.kr

 

์ฒ˜์Œ์— ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘ผ ์ฝ”๋“œ

์ฐจ๋ก€๋Œ€๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ„๋ฉด์„œ set์œผ๋กœ ๋งŒ๋“ค์–ด ๊ธธ์ด๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 132265: ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ

def solution(topping):
    answer = 0
    s = round(len(set(topping)) // 2)
    
    for i in range(s, len(topping)-s+1):
        if len(set(topping[:i])) == len(set(topping[i:])):
            answer += 1
        
    return answer

 

1๋ฒˆ ๋นผ๊ณ  ์ „๋ถ€ ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ–ˆ๊ณ  (...) 

์‹œ๊ฐ„ ์ค„์—ฌ๋ณด๊ฒ ๋‹ค๊ณ  ๋‚˜๋ฆ„ ์ •๋น„๋ฅผ ๊ฑฐ์นœ ํ›„ ๋‹ค์‹œ ์‹œ๋„ํ–ˆ๋‹ค.

๋งค ์‹œ๋„๋งˆ๋‹ค ๋ถ€๋ถ„๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฑธ ๋˜ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ

๋ถ€๋ถ„๋ฆฌ์ŠคํŠธ, ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ•˜๋‚˜์”ฉ ๋นผ๊ณ  ๋”ํ•˜๋ฉด์„œ ๊ณ„์‚ฐํ–ˆ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 132265: ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ

def solution(topping):
    answer = 0
    s = round(len(set(topping)) // 2)
    size = len(topping) - s*2

    t1 = topping[:-s]
    t2 = topping[-s:]

    s1 = set(t1)
    s2 = set(t2)

    for i in range(size):
        if len(s1) == len(s2):
            answer += 1

        p = t1.pop()
        if p not in t1:
            s1.remove(pop)
        s2.add(p)

    return answer

 

.. 4๋ฌธ์ œ? 5๋ฌธ์ œ? ๋นผ๊ณ  ๋˜ ์ „๋ถ€ ์‹œ๊ฐ„์ดˆ๊ณผํ–ˆ๋‹ค.

์ฐพ์•„๋ณด๋‹ˆ Counter๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ฒ ์ˆ˜๊ฐ€ ๊ฐ–๋Š” ๋กค์ผ€์ดํฌ๋Š” ๋”•์…”๋„ˆ๋ฆฌ(Counter)๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ฒ ์ˆ˜ ๋™์ƒ์ด ๊ฐ–๋Š” ๋กค์ผ€์ดํฌ๋Š” ์ง‘ํ•ฉ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ t1, t2๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ•˜๋‚˜์”ฉ ๋นผ๊ณ  ๋”ํ•˜๋ฉด์„œ ๊ณ„์‚ฐํ–ˆ๋‹ค.

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 132265: ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ

from collections import Counter

def solution(topping):
    answer = 0
    t1 = Counter(topping)
    t2 = set()
    
    for i in topping:
        t1[i] -= 1
        if t1[i] == 0:
            t1.pop(i)
        t2.add(i)
        
        if len(t1) == len(t2):
            answer += 1
    return answer

 

ํ†ต๊ณผ!!

๐Ÿ˜ฌ