https://school.programmers.co.kr/learn/courses/30/lessons/12906
단순 중복 제거가 아닌 연속 중복 제거라는 것을 잊지말자
list를 사용할 경우 for문에서 인덱스를 이용해 이전 숫자와 비교할 경우 문제 발생함. 이럴 때는 while문을 비교하는 것이 나음
이전 숫자를 담는 변수로 비교하는 것이 편함
스택을 사용할 수 있음
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> list = new ArrayList<>();
int past=-1; //이전 숫자
for(int i=0; i<arr.length; i++){
if(i>0){
if(past!=arr[i])//이전 숫자와 비교
list.add(arr[i]);
}
else
list.add(arr[i]);
past=arr[i];
}
int answer[] = new int[list.size()];
int k=0;
for(int i : list)
answer[k++]=i;
return answer;
}
}
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Stack<Integer> stack = new Stack<>();
for(int i=0; i<arr.length; i++){
if(!stack.empty()){//스택이 비어있지 않으면
if(stack.peek()!=arr[i])//이전 숫자와 다르면
stack.push(arr[i]);//스택에 push
}
else//스택에 아무것도 없으면
stack.push(arr[i]);//그냥 바로 push
}
int answer[]=new int[stack.size()];
for(int i=stack.size()-1; i>=0; i--)
answer[i] = stack.pop();
//스택은 pop하면 선입후출이므로 역순서로 배열에 넣는다.
return answer;
}
}
for(int i=stack.size()-1; i>=0; i--)
answer[i] = stack.pop();
이 부분을 왜 해줘야하나요 ?? 궁금해서 여쭈어봅니다 ㅠㅠ