๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฌธ์ž์—ด ์••์ถ• (Python)

1. ๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ ๋งํฌ

  • ์ž…๋ ฅ :
    • s "aabbaccc" : ๋ฌธ์ž์—ด
  • ์ถœ๋ ฅ :
    • result 7
    • ๋ช‡ ๊ฐœ ๋‹จ์œ„๋กœ ์ž˜๋ผ์„œ ์••์ถ•ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์งง์€ ๊ธธ์ด๋กœ ์••์ถ•์ด ๊ฐ€๋Šฅํ•œ์ง€ ์ถœ๋ ฅ

2. ์ฝ”๋“œ

solution1.py

def solution(s):
    answer = len(s)
    for i in range(1,int(len(s))+1): #๋ช‡๊ฐœ์”ฉ ์ž๋ฅผ์ง€
        pos = 0 #ํ˜„์žฌ์œ„์น˜
        #๋‹จ์œ„ ์„ค์ •
        length = len(s)
        while pos + i <=len(s):
            unit = s[pos:pos+i]
            pos+=i #i๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ

            #๋‹จ์œ„๊ฐ€ ๋ช‡๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์ฐพ๊ธฐ
            count =0
            while pos + i  <= len(s):
                if s[pos:pos+i] == unit:
                    count+=1
                    pos +=i
                else:
                    break
            if count>0:
                #๊ฐ์†Œํ•  ๋ฌธ์ž์—ด ๊ธธ์ด
                length -=i*count
                #์ฆ๊ฐ€ํ•  ์ˆซ์ž๊ธธ์ด (๋“ฑ์žฅํšŸ์ˆ˜)
                if count<9:
                    length+=1
                elif count < 99:
                    length+=2
                elif count < 999:
                    length+=3
                else: #s์˜ ๊ธธ์ด๊ฐ€ 1000์ผ ๊ฒฝ์šฐ
                    length+=4
        answer = min(answer, length)
    return answer

3. ํšŒ๊ณ 

  • ๋ฌธ์ž์—ด์„ ๊ฑด๋„ˆ๋›ฐ์–ด๊ฐ€๋ฉฐ ์ž๋ฅด๋Š” ๊ฒƒ์„ ์Šฌ๋ผ์ด์‹ฑ๋งŒ์œผ๋กœ ํ•ด๋ณด๋ คํ–ˆ์—ˆ๋Š”๋ฐ ์•ˆ ๋˜์„œ ๊ฒฐ๊ตญ ํ˜„์žฌ์œ„์น˜(pos)๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ๋งค๋ฒˆ pos+i ํ•ด์ค˜์„œ ์ธ๋ฑ์Šค ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•œ๋‹ค.
  • while ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. unit์„ ์„ค์ •ํ•  ๋•Œ์™€ unit์ด ๋ช‡๋ฒˆ ๋“ฑ์žฅํ•˜๋Š”์ง€ ์ฐพ๋Š” ๊ณผ์ • ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ์˜ while๋ฌธ์ด ์žˆ๋Š”๋ฐ, ๋ชจ๋‘ pos+i์ด s์˜ ๊ธธ์ด๋ณด๋‹ค ์ปค์ง€๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.(์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€๋™์•ˆ ๋™์ž‘)
  • length๋Š” ์›๋ž˜ ๊ธธ์ด์—์„œ๋ถ€ํ„ฐ ๋ฐ˜๋ณต๋˜๋Š” unit์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉด icnt(๋ช‡๊ฐœ๋‹จ์œ„์ธ์ง€๋ช‡๋ฒˆ๋“ฑ์žฅํ–ˆ๋Š”์ง€) ๋งŒํผ ๋ฌธ์ž์—ด์„ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
  • ๋“ฑ์žฅํšŸ์ˆ˜๊ฐ€ ํ•œ ์ž๋ฆฌ์ˆ˜์ด๋ฉด ์ˆซ์ž๊ฐ€ ํ•˜๋‚˜๋‹ˆ๊นŒ +1, ๋‘ ์ž๋ฆฌ์ˆ˜์ด๋ฉด +2 ๋ฅผ ํ•ด์ค˜์•ผํ•œ๋‹ค.
  • s์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 1000๊ฐœ์ด๋‹ค, ๋งŒ์•ฝ a 1000๊ฐœ๋กœ s๊ฐ€ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค๋ฉด ->1000a๋กœ ์••์ถ•ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋„ค์ž๋ฆฌ์ˆ˜ ์ผ ๊ฒฝ์šฐ +4, ๊ทธ ์ด์ƒ์€ ๋“ฑ์žฅํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋‹จ์œ„๋ณ„๋กœ ๊ธธ์ด ํ™•์ •๋œ ํ›„์—๋Š” ๋” ์ž‘์€ ๊ธธ์ด๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋ฏ€๋กœ, ์›๋ž˜ s์˜ ๊ธธ์ด์™€ ๋น„๊ต๋ฅผ ํ•œ ํ›„, ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•œ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์ด ์—ฌ๋Ÿฌ๊ฐœ์ด๋‹ค๋ณด๋‹ˆ, pos, length, count, if count>0:, answer = min(answer, length) ๋“ฑ์„ ์–ด๋”” ๋†“์•„์•ผ ํ• ์ง€ ํ—ท๊ฐˆ๋ ธ๋˜ ์ ์ด ๊ฐ€์žฅ ์–ด๋ ค์› ๋‹ค.
  • ์ฃผ์„์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๋„๋ก ํ‘œ์‹œํ•˜๊ณ  ๋ฐ˜๋ณตํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

4. ์ฐธ๊ณ  ์ฝ”๋“œ