Algorithm Problem/Python

[python] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 110 ์˜ฎ๊ธฐ๊ธฐ(์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ ์‹œ์ฆŒ2)

deo2kim 2022. 2. 10. 23:04
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

1. ๋ชจ๋“  110 ์ฐพ๊ธฐ

2. ๋‚˜๋จธ์ง€์— 0์ด ์žˆ์œผ๋ฉด ๊ทธ 0๋’ค์— 110 ๋‹ค ๋ถ™์ด๊ณ 

3. 0์ด ์—†์œผ๋ฉด ์•ž์— 110์„ ๋‹ค ๋ถ™์ธ๋‹ค

 

์›”์ฝ”์ฑŒ ํ•ด์„ค์ง€ ๋ณด๊ณ  ํ’€์—ˆ๋Š”๋ฐ ๋‹ต ๊ตฌํ•˜๋Š”๊ฒŒ ํ—ท๊ฐˆ๋ ค์„œ ๋งŽ์ด ๊ณ ๋ฏผํ•œ ๋ฌธ์ œ

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

def solution(s):
    answer = []
    for x in s:
        # ๋ชจ๋“  110 ์ฐพ๊ธฐ
        # 110 ์ฐพ์œผ๋ฉด ๋ณ€ํ˜•๋œ x์—์„œ ๋˜ ์ฐพ๊ธฐ
        one_one_zero_cnt = 0
        stack = []
        for x_one in x:
            if x_one == '1':
                stack.append(x_one)
            else:
                if len(stack) >= 2 and stack[-1] == '1' and stack[-2] == '1':
                    stack.pop()
                    stack.pop()
                    one_one_zero_cnt += 1
                else:
                    stack.append(x_one)

        x = ''.join(stack)
        # ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฒดํฌํ•ด์„œ 0์ด ๋‚˜์˜ค๋ฉด ๊ทธ 0 ๋’ค์— ๋ชจ๋“  110 ๋ถ™์ด๊ธฐ
        # 0 ์—†์œผ๋ฉด ๋‚˜๋จธ์ง€๊ฐ€ ์ „๋ถ€ 1๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  110์„ ์•ž์— ๋ถ™์ด๊ธฐ
        for i in range(len(x) - 1, -1, -1):
            if x[i] == '0':
                answer.append(x[:i + 1] + ('110' * one_one_zero_cnt) + x[i + 1:])
                break
        else:
            answer.append('110' * one_one_zero_cnt + x)

    return answer

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

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

๋งํฌ: 110 ์˜ฎ๊ธฐ๊ธฐ

๋ฐ˜์‘ํ˜•