배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있음
배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거해야함
[1,1,2,3,4,4,1,1] -> [1,2,3,4,1] 이 되어야함
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
LinkedList answerList = new LinkedList();
answerList.add(arr[0]);
for (int i = 1; i < arr.length; i++) {
if (arr[i] != (int)answerList.getLast()) {
answerList.add(arr[i]);
}
}
int[] newArr = new int[answerList.size()];
for (int i = 0; i < newArr.length; i++) {
newArr[i] = (int) answerList.get(i);
}
return newArr;
}
}
이렇게 풀었더니.. 효율성 테스트를 통과하지 못함 아마 ArrayList -> Array로 바꾸는 과정이 잘못 되었나 라는 생각.. 그래서 다시 품
public static int[] hateSameNUm(int []arr) {
ArrayList<Integer> arrtemp = new ArrayList<Integer>();
int temp = -1;
for(int i : arr) {
if (i != temp) {
arrtemp.add(i);
System.out.println(i);
temp = i;
}
}
int[] answer = new int[arrtemp.size()];
int size=0;
for(int t : arrtemp){
answer[size++] = t;
}
return answer;
}
ArrayList
ArrayList는 내부적으로 데이터를 배열에서 관리하며 데이터의 추가, 삭제를 위해 아래와 같이 임시 배열을 생성해 데이터를 복사 하는 방법을 사용 하고 있음. 대량의 자료를 추가/삭제 하는 경우에는 그만큼 데이터의 복사가 많이 일어나게 되어 성능 저하를 일으킬 수 있지만 반면 각 데이터는 인덱스를 가지고 있기 때문에 한번에 참조가 가능해 데이터의 검색에는 유리한 구현체
LinkedList
LinkedList는 데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태만 알고 있으면되기에 추가 삭제가 ArrayList보다 빠르고 용이함. 삽입삭제가 빈번하게 발생되면 Linked List을 사용해 시스템 구현이 바람직함.
하지만 전체 검색시에 데이터와 포인터도 가지고 있어야 하기 때문에 메모리를 많이 잡음
=> 가장 큰 차이는 초기 크기의 설정 여부와 추가 삭제 방식
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
List<Integer> list = new ArrayList<Integer>();
list.add(arr[0]);
for (int i = 1; i < arr.length; i++) {
if (arr[i] != arr[i - 1])
list.add(arr[i]);
}
int[] answer = new int[list.size()];
for (int i = 0; i < list.size(); i++)
answer[i] = list.get(i);
return answer;
}
}