[프로그래머스] Level1) 같은 숫자는 싫어
문제 설명
배열 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보다 작거나 같은 정수
풀이 과정 (자바)
ArrayList인 lst, int형 cnt와 tmp를 생성했다.
입력받은 arr에서 값을 하나씩 꺼냈다.
0부터 9까지의 값만 있다고 했기 때문에 처음에는 tmp (-1)와 같은 value는 없다.
cnt는 0으로 초기화했으므로, 우선 lst에 value 값을 추가했다.
그리고 tmp 값을 현재 value로 처리했다.
for 문을 돌면서 이전 값 (tmp)과 현재 값 (value)을 비교했다.
같다면 cnt 값을 늘리고, 같지 않다면 cnt 값을 0으로 처리했다.
for 문을 종료하고, lst에 있는 값을 통해 int형 배열인 answer를 생성했다.
lst에 있는 값을 answer에 넣고, answer를 반환했다.
결과
다른 사람의 풀이
ArrayList인 tempList를 생성했고, int형 preNum을 10으로 초기화했다.
입력받은 arr에서 값을 하나씩 꺼내 preNum과 비교했다.
0부터 9까지의 값만 있다고 했기 때문에 arr에 10은 없다.
처음에는 preNum이 10이므로, 첫 num은 tempList에 추가했다.
그리고 preNum 값을 현재 num으로 처리했다.
for 문이 돌면서 이전 값 (preNum)과 현재 값 (num)을 비교해서 같지 않은 경우, tempList에 추가했다.
for 문을 종료하고, tempList에 있는 값을 통해 int형 배열인 answer를 생성했다.
tempList에 있는 값을 answer에 넣고, answer를 반환했다.
기타
내가 풀었던 내용대로 하려면 int형인 cnt 값을 만들지 않고, Boolean 변수를 생성해서 처리하는 게 낫지 않았을까 싶다. 또한 다른 사람의 풀이처럼 굳이 변수를 2개를 생성하지 않고, 하나로도 처리할 수 있었을 거 같아 아쉬움이 남았다.