본문 바로가기
코딩테스트 연습

프로그래머스 같은 숫자는 싫어 Level 1

by 동배_ 2021. 8. 19.

문제 설명

https://programmers.co.kr/learn/courses/30/lessons/12906?language=python3 

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 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보다 작거나 같은 정수

문제 해석 및 풀이 방법

1. for문을 통해 배열의 값들을 비교한 후 다르면 이전 값을 넣는다.

2. 반복문이 끝나면 마지막값을 추가해준다.(마지막으로 연속되면 for문에 인식안됨)

3. 결과를 반환한다. 

 

내가 작성한 소스코드

def solution(arr):
    answer = []

    for i in range(len(arr)):
        if i+1 == len(arr):
            break
        if arr[i] != arr[i+1]:
            answer.append(arr[i])
            
    answer.append(arr[i])
    
    return answer

배열 크기만큼 for문을 한다. 

i+1 이 len(arr)면 반복문을 종료한다. (간단히 말해서 배열 인덱스 초과를 방지하기 위함)

if 문을 통해서 연속되지 않는 경계선을 확인한다 arr[i] != arr[i+1] 만약 연속되지 않으면 현재 기준인 인덱스 i의 배열 값을 answer에 추가한다. 

 

그후 반복문이 끝나면 마지막 인덱스를 추가한다. (for문을 하면 마지막 연속된 값들은 반영이 안됨)

결론 및 고찰

문제가 간단했다. 처음보고 set쓰면 되는거 아니야? 해서 list(set(arr))를 했는데 실패가 떠서 자세히보니 중복이 아니라 연속된 값을 제거하는 것이였다. 그래서 간단히 for을 통해 해결했다. 

 

소요 시간 8

댓글