[파이썬 알고리즘] 같은 숫자는 싫어, 중복 숫자 제거

by Youngho posted May 21, 2018
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

알고리즘을 온라인상에서 풀 수 있는 좋은 사이트(https://programmers.co.kr)를 발견했다.

많은 알고리즘 문제 중 "같은 숫자는 싫어" 문제를 풀어보았고, 풀이를 공유하려한다.

 

나의 풀이

def no_continuous(s):
    list = []
    for i in range(len(s)):
        if i == 0:
            list.append(s[i])
        elif s[i-1] != s[i]:
            list.append(s[i])
    return list

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( no_continuous( "133303" ))

 

그냥 빈 리스트를 만들고 받은 s 배열의 요소 개수를 len 함수로 구한 다음에, range 함수로 그 범위를 만들어 주었다.

일반 기본이 되는 논리는 배열의 이전 요소와 현재 요소가 같지 않다면 리스트에 추가를 하는 것이다.

단, 만약 첫 번째 반복일 경우(즉, i가 0일 경우)엔 s[i - 1]가 존재하지 않아 오류가 난다.

이에 대한 해결로 만약 i가 0일 경우엔 리스트에 바로 추가하게끔 했다.

 

일단 나는 이렇게 풀었고, 다른 사람들의 풀이를 몇 가지 보며 생각을 넓혀보자.

 

def no_continuous(s):
    a = []
    for i in s:
        if a[-1:] == [i]: continue
        a.append(i)
    return a

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( no_continuous( "133303" ))

 

def no_continuous(s):
    return [s[i] for i in range(len(s)) if s[i] != s[i+1:i+2]]

print( no_continuous( "133303" ))

 

def no_continuous(s):
    result = []
    for i in s:
        if (len(result) == 0 or result[-1] != i):
            result.append(i)
    return result

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print( no_continuous( "133303" ))

 

 

 

 



서버에 요청 중입니다. 잠시만 기다려 주십시오...