문제 설명
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분
'코딩테스트 연습' 카테고리의 다른 글
프로그래머스 약수의 개수와 덧셈 Level 1 (0) | 2021.08.21 |
---|---|
프로그래머스 폰켓몬 Level 1 (0) | 2021.08.20 |
프로그래머스 괄호 변환 Level2 (0) | 2021.08.18 |
프로그래머스 튜플 Level 2 (0) | 2021.08.17 |
프로그래머스 H-Index Level 2 (0) | 2021.08.16 |
댓글