알고리즘 연습 [같은 숫자는 싫어]
같은 숫자는 싫어
문제
no_continuous함수는 스트링 s를 매개변수로 입력받습니다.
s의 글자들의 순서를 유지하면서, 글자들 중 연속적으로 나타나는 아이템은 제거된 배열(파이썬은 list)을 리턴하도록 함수를 완성하세요.
예를들어 다음과 같이 동작하면 됩니다.
s가 '133303'이라면 ['1', '3', '0', '3']를 리턴
s가 '47330'이라면 [4, 7, 3, 0]을 리턴
나의 풀이
def no_continuous(s):
for i in range(10):
while s.find(str(i)*2) > -1:
s = s.replace(str(i)*2, str(i))
return list(s)
IndexError: list index out of range 에러가 자꾸나서 아예 방법을 바꿔 00에서 99까지의 숫자들이 반복되면 한개로 줄이는 식으로 풀었다.ㅜㅜ
다른 풀이
def no_continuous(s):
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
- continue 해당 조건에서만 수행하지 않고 넘어감
- 슬라이싱 [시작점:종료점:스텝]
- s[1:] : 1부터 끝까지
- s[:] : 처음부터 끝까지
- s[:-1]: 끝값 전까지
- s[::2]: 두칸 단위로
- s[::-1]: 거꾸로
- [-1:]은 맨 끝의 인덱스를 리스트로 만들어줌
- [-1] == i 로 처리하면 IndexError 남 -> 빈리스트일 때 a[-1]값이 없어서 인가보다
다른 풀이2
def no_continuous(s):
return [s[i] for i in range(len(s)) if s[i] != s[i+1:i+2]]
- 이 풀이에서는
s[i+1:i+2]
로 처리 - s[i] != s[i+1]로 풀고 IndexError: list index out of range에러가 났었는데 이렇게 하면 끝이 []로 처리돼서 에러가 안남