Slow is better than NOTHING

Programmers 풀이/[LEVEL 1]

[Python] 프로그래머스 - 같은 숫자는 싫어

Jeff_Kang 2019. 5. 31. 18:40
반응형

- 문제 설명

 

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 배열 arr에서 제거 되고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다.
예를들면

  • arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
  • arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

 

- 제한사항

  • 배열 arr의 크기 : 1,000,000 이하의 자연수
  • 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

- 입출력 예시

arr answer
[1,1,3,3,0,1,1] [1,3,0,1]
[4,4,4,3,3] [4,3]

 

주어진 배열 arr 에서 중복을 제외한 List를 반환하는 문제입니다. 단, 여기서 중복을 제거한다는 것은 연속된 중복을 제거한다는 의미입니다. 

ex ) 1,1,1,3,2,3,4,1 => 1,2,3,4 로 전체 배열에서 중복을 제거하는 것이 아닌 것이죠.

또한 연속된 중복을 제거한 후 반환되는 리스트는 순서가 유지되어야합니다. 중복을 제거하라는 문제를 보고 Set 자료형을 쓰면 된다고 생각하셨다면 Set은 전체 배열에서의 중복을 제거하고 그 순서를 정렬해주는 것이므로 사용해서는 안됩니다. 

 

  이 문제에 대해 어떤 다른 최적화 방법을 생각하기보다는 연산량이 많더라도 가장 간단한 완전 탐색을 해야되는 문제라고 생각했습니다. 코딩테스트에서 이런 문제들은 효율성 검사를 하지 않는다면 단순히 답만 맞으면 되기때문에, 효율적인 코드를 생각하는 시간적 Cost가 더 클 수 있거든요..

def solution(arr):
    result = []
    result.append(arr[0])
    for i in range(1,len(arr)):
        if arr[i] != arr[i-1]:
            result.append(arr[i])
    return result

 

 제가 작성한 코드는 다음과 같습니다. result 라는 list에서 첫 번째 리스트의 인덱스는 항상 arr의 인덱스 값을 가질 것이므로 초기값은 arr의 첫 번째 인덱스로 잡아줍니다. 그 이후 2번째 인덱스부터 arr 배열의 마지막 인덱스까지 전, 후 값을 비교하여 다르다면 이전 값을 append 해줍니다. 

 

배열을 처음부터 끝까지 탐색하며 2개씩 비교해나가는 코드로 작성해보았습니다. 

반응형