๐Ÿ’ก Coding Test/Programmers

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

soozkim 2023. 10. 9. 22:11

์—ฐ์Šต๋ฌธ์ œ Lv2. ๋กค์ผ€์ดํฌ ์ž๋ฅด๊ธฐ

 

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

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

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

์ž…์ถœ๋ ฅ ์˜ˆ

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

 

728x90