알고리즘, 코딩테스트
[프로그래머스] 같은 숫자는 싫어
몰라모르겠어요
2022. 8. 19. 00:27
내 풀이
public int[] solution_3_1(int [] arr){
int[] answer = {};
Stack<Integer> stack = new Stack<>();
for(int a : arr){
if(stack.isEmpty() || stack.peek() != a){
stack.push(a);
}
}
answer = new int[stack.size()];
for(int i=stack.size()-1; i >= 0; i--){
answer[i] = stack.peek();
stack.pop();
}
return answer;
}
1. 스택을 만든다.
2. 비어있거나, 스택 맨 위 값과 현재 값이 같지 않으면 스택에 현재 값 넣는다.(같으면 안 넣을 것)
3. 거꾸로 뽑아 answer에 넣어주면 끝
ArrayList 이용한 방법(다른 사람의 풀이)
//2. 다른 사람의 풀이
public int[] solution_3_2(int [] arr){
ArrayList<Integer> tempList = new ArrayList<>();
int preNum = 10;
for(int num : arr){
if(preNum != num){
tempList.add(num);
}
preNum = num;
}
int[] answer = new int[tempList.size()];
for(int i=0; i < answer.length; i++){
answer[i] = tempList.get(i).intValue();
}
return answer;
}
1. 어레이리스트를 만든다.
2. preNum(이전 값)을 10으로 지정(0~9까지 정수기 때문에)
3. 포문 돌려서 이전 값과 현재 값이 다르면 리스트 추가
4. 다시 포문 돌려서 리스트의 값을 answer에 추가
둘 다 풀이 방법은 동일하다.