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)

직후의 원소와 같지 않은 경우에 배열에 넣는다.