같은 숫자는 싫어 (Level 1)
문제 설명
배열 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,2
문제의 예시와 같습니다.
작성코드
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<>();
int value = -1;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != value) {
list.add(arr[i]);
value = arr[i];
}
}
int[] answer = new int[list.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = list.get(i);
}
return answer;
}
}
코드설명
제한사항에 보면 배열 arr의 원소의 크기가 0보다 크거나 같고 9보다 작거나 같은 정수라고 되어 있다. 즉 음수를 없다는 것. 그래서 6번라인에서 value값을 -1로 초기화 해주었다. (6번라인)
그 후 for문을 입력받은 arr배열의 길이만큼 돌면서 배열의 원소값이 value값과 같지 않다면 미리 선언해둔 ArrayList에 값을 하나씩 넣어주었다. 그 값을 넣어줄때 마다 해당 값을 value값으로 초기화 시켜준다. (7~12번 라인)
그리고 ArrayList의 사이즈 만큼 answer배열의 길이를 지정해 주고. 저장된 값을 다시 answer값에 넣어주었다. (13~16번라인)