STUDY/알고리즘
[프로그래머스] 같은 숫자는 싫어 (Python)
seonyounggg
2020. 12. 12. 02:51
✏️ 문제
코딩테스트 연습 - 같은 숫자는 싫어
배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은
programmers.co.kr
✏️ 풀이
arr 리스트의 원소들을 차례대로 넣으면서,
연속한 경우 넣지 않기 위해 직전에 넣은 원소(answer[-1])와 일치하는 지 검사한 후 일치한다면 연속된 문자이므로 넣지 않는다.
✏️ 코드
def solution(arr):
answer = []
for x in arr:
if len(answer) != 0 and answer[-1] == x :
continue
else:
answer.append(x)
return answer
참고로 처음에 실수로 and 대신 &을 썼었는데 'list out of range'가 났다.
and 를 사용하면 answer 길이가 0 일때 이미 앞 조건이 False이므로 뒤 조건을 아예 실행하지 않으므로 에러가 나지 않는다.
파이썬에서 &는 논리연산자가 아닌 비교연산자이다. 따라서 의미도 맞지 않고 길이가 0일때도 -1을 참조하는 부분이 실행되다보니 에러가 났던 것이다.
✏️ 다른 사람 풀이
def no_continuous(s):
a = []
for i in s:
if a[-1:] == [i]: continue
a.append(i)
return a
length가 0일 때 -1을 참조하면 Index error 가 나기 때문에 예외처리를 해주었는데
위와 같이 슬라이싱을 해주면 length가 0이어도 오류가 나지 않는다고 한다... 신기해
def no_continuous(s):
# 함수를 완성하세요
return [s[i] for i in range(len(s)) if s[i] != s[i+1:i+2]]
리스트 컴프리헨션을 사용하여 간단하게 작성된 풀이이다.
(리스트 컴프리헨션에 대해 정리하였다. -> seonyounggg.tistory.com/91)
직후의 원소와 같지 않은 경우에 배열에 넣는다.