import java.util.*; public class Solution { public int[] solution(int []arr) { List<Integer> num = new ArrayList<>(); for(int arrNum : arr) { if(num.isEmpty() || num.get(num.size() - 1) != arrNum) num.add(arrNum); } int[] answer = new int[num.size()]; int i = 0; for(int resultNum : num) { answer[i++] = resultNum; } return answer; } }
- 알고리즘 스택의 LIFO(후입 선출) 방식을 활용하여 접근하였습니다.
- 연속된 숫자는 1개만 남기며, 순서는 유지하는 문제입니다.
- List를 통해 배열의 크기를 동적할당하여 주었습니다.
3-1. for-each문을 사용하여 arr배열에 있는 값들을 arrNum으로 대입하였습니다.
3-2. 조건문을 통해 List num이 비어있거나, num 리스트의 마지막 인덱스를 확인하고 arrNum과 같지 않을때 List에 arrNum값을 추가해줍니다.List<Integer>
을 int[ ]로 만들기 위해 size를 측정하여 할당하였습니다.
4-1. for-each문을 활용하여 answer[i]에 resultNum을 반복적으로 수행하여 List의 값을 answer에 복사하였습니다.
스택은 데이터를 저장할 때 사용하는 자료구조로, 데이터의 입력과 출력 순서는 후입선출(LIFO)방식입니다.
데이터를 제한적으로 접근할 수 있는 구조임며, 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조입니다.
후입선출 (Last In, First Out; LIFO)
:
- 스택은 가장 최근에 추가된 요소가 가장 먼저 제거되는 구조를 가지고 있습니다.
책을 쌓아놓은 것처럼, 맨 위에 추가된 요소가 가장 먼저 꺼내지는 원리입니다.
푸쉬(Push)와 팝(Pop)
:
push: 새로운 요소를 스택에 추가하는 작업
pop: 가장 상위에 있는 요소를 제거하고 반환하는 작업
제한된 접근
:
스택은 상위 요소에만 접근할 수 있습니다. 중간에 있는 요소에 직접 접근하려면 상위 요소를 차례로 제거해야 합니다.