https://programmers.co.kr/learn/courses/30/lessons/77886#
stack 사용
예시 추가
입력 : ["1011110","01110","101101111010"]
정답 : ["1011011","01101","101101101101"]
https://programmers.co.kr/learn/courses/30/lessons/77886/questions 에서 도움얻음
def solution(s):
answer = []
def func(string):
cnt = 0
stack = []
for i in range(len(string)):
if string[i] == "0" and stack[-2:]==["1","1"]:
cnt += 1
stack.pop()
stack.pop()
else:
stack.append(string[i])
string = ''.join(stack)
tmp = "110"*cnt
if "111" in string:
idx = string.index("111")
string = string[:idx] + tmp + string[idx:]
elif "11" == string[-2:]:
string = string[:-2] + tmp + "11"
elif "01" == string[-2:]:
string = string[:-1] + tmp + "1"
elif "1" == string[-1:]:
string = tmp + string
else:
string += tmp
return string
for i in range(len(s)):
answer.append(func(s[i]))
return answer
보기 좋게 함수를 따로 만들어서 처리해줬다
먼저 110
들을 싹 없애주기 위해 stack
을 만들어서 한숫자씩 넣어줌
0
이 나오면 앞에 두자리가 11
인지 확인해서 맞다면 110
이니까 pop * 2
cnt
길이 만큼 110
만들어주기 => tmp = "110" * cnt
다음은 111
이 있으면 111
앞에 tmp
넣어주기
그 외에 맨 마지막 부분이 11
이면 11
앞에 tmp
넣어주기
그 외에 맨 마지막 부분이 01
이면 1
앞에 tmp
넣어주기
그 외에 맨 마지막 부분이 1
이면 1
뒤에 tmp
넣어주기
나머지는 맨 뒤에 tmp
붙여주기
처음에는 while 문을
110
이 아예 안나올때까지 돌려서 찾는 식으로 함while "110" in string: cnt += string.count("110") string = string.replace("110","")
이러면 타임리밋...^^
stack 꼭 사용하기!!