배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면,
배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.
public class HateSameNumber {
public static void main(String[] args) {
HateSameNumber hsn = new HateSameNumber();
int[] arr = {1,1,3,3,0,1,1};
int[] solution = hsn.solution(arr);
for (int i : solution) {
System.out.println("i = " + i);
}
}
public int[] solution(int []arr) {
//숫자를 넣어둘 stack
Stack<Integer> stack = new Stack<>();
List<Integer> basket = new LinkedList<>();
for(int i : arr){
if(!stack.isEmpty()){
int stackSu = stack.peek();
if(stackSu!=i){
stack.push(i);
basket.add(i);
}
}else{
stack.push(i);
basket.add(i);
}
}
int[] answer = new int[basket.size()];
int idx = 0;
for(int i : basket){
answer[idx++] = i;
}
return answer;
}
}
나는 마지막 숫자를 확인하기 위해 Stack을 사용했다... 그런데 풀이를 보니 LinkedList의 경우 .getLast와 같은 메서드가 있어서 값을 가져올 수 있더라... 맨날 ArrayList만 써서 없는 줄 알았지 ㅜㅜ 그래도 LinkedList에 대해 더 공부해야겠다고 느꼈고 위 코드도 나쁘게 푼 코드는 아니여서 이대로 풀이로 올려놓았다.
LinkedList의 경우 넣는 순서대로 들어가 있기 때문에 .getLast(), .getFirst()와 같은 메서드들로 배열의 값을 가져올 수 있음!