카테고리 없음

스택/ 큐 - 같은 숫자는 싫어

JUNGKEUNG 2024. 7. 30. 23:34
반응형

이번 문제는 배열에 숫자를 넣고 연속적인 숫자를 제거하고 남은 수의 배열의 길이가 어떻게 되는지 확인하는 문제이다. 앞의 원소와 비교하기 위한 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 
}