반응형
이번 문제는 배열에 숫자를 넣고 연속적인 숫자를 제거하고 남은 수의 배열의 길이가 어떻게 되는지 확인하는 문제이다. 앞의 원소와 비교하기 위한 num을 선언하고 원소가 0 ~ 9 까지 라고 하였을때 영향을 받지 않도록 초기값은 -1로 서언 해준다.
import java.util.ArrayList;
public class Solution {
public int[] solution(int []arr) {
int[] answer = {};
ArrayList<Integer> arrList = new ArrayList<Integer>();
int num = -1;
for(int i = 0; i < arr.length; i++) {
if(arr[i] != num) {
arrList.add(arr[i]);
num = arr[i];
}
}
answer = new int[arrList.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = arrList.get(i);
}
return answer;
}
}
코드 분석
for(int i = 0; i < arr.length; i++) {
if(arr[i] != num) {
arrList.add(arr[i]);
num = arr[i];
}
}
for문에서 처음에는 num과 무조건 숫자가 다르므로 arrList.add 가 실행되어 처음 숫자는 무조건 삽임해준다.
answer = new int[arrList.size()];
for(int i = 0; i < answer.length; i++) {
answer[i] = arrList.get(i);
}
이후 부터는 arr[i]를 num에 적용했으니 num과 계속 비교하여 숫자가 다른 경우에만 arrList에 넣어주면된다.
ArrayList 란?
ArrayList는 자바의 컬렉션 프레임워크의 일부로 List 인터페이스를 상속받은 클래스 중 하나이다.
ArrayList는 한번 생성하면 크기가 고정되는 배열과 다르게 부족한 공간을 자동으로 조정해주는 선형 리스트이다.
배열은 데이터를 추가, 삭제 시 반복문으로 인덱스를 한칸씩 밀거나 당기는 식으로 공간을 조절하지만 ArrayList는 이 과정을 자동으로 처리해주어 사용이 편리하다.
ArrayList 사용법
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<String> list2 = new ArrayList<>(); // 타입 생략 가능
ArrayList<Person> list3 = new ArrayList<>(); // 타입으로 클래스도 가능
선언시 자료의 안정성르 위해 제네릭(Generic) 방식으로 타입을 미리 지정해주어 같은 타입의 객체들만 리스트에 추가하도록 할 수 있다.
ArrayList 데이터 추가
ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 데이터 추가
list.add(3);
list.add(1, 2); // 1번 indexdp 2 추가
ArrayList 데이터 삭제
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(2); //2번 인덱스의 데이터 삭제
list.remove(list.indexOf(1)); //1을 가지고 있는 인덱스를 리턴하여 삭제
list.clear(); //리스트의 모든 데이터 삭제
ArrayList 값 가져오기
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10));
System.out.println(list.get(3)); //3번 인덱스에 위치한 값 출력, 8
System.out.println(list.get(0)); //0번 인덱스에 위치한 값 출력, 2
ArrayList 사이즈 확인
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10));
System.out.println(list.size()); //5
list.add(12);
System.out.println(list.size()); //6
ArrayList 특정 값을 포함하는지 검색
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int index = list.indexOf(2); //원하는 값의 인덱스를 리턴, 없는 경우 -1 리턴, 1
boolean contains = list.contains(3); // 특정 값이 있는지 확인, true
ArrayList 값 출력
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
System.out.println(list); //list 전체 출력
System.out.println(list.get(3)); //3번 인덱스에 위치한 값 출력
for (int item: list) {
System.out.print(item + " "); //1 2 3 4 5
}
Iterator iter = list.iterator(); //Iterator를 사용하는 경우
while (iter.hasNext()) {
System.out.print(iter.next() + " "); //1 2 3 4 5
}