https://school.programmers.co.kr/learn/courses/30/lessons/12906
스택(Stack)
- 인덱스를 비교해가면서 연속되는 숫자를 배열(리스트)에 넣기
1. stack을 활용한 풀이
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Stack<Integer> stack = new Stack<>();
stack.push(arr[0]);
for(int i=1;i<arr.length;i++) {
if(arr[i-1] != arr[i]) stack.push(arr[i]);
}
int[] answer = new int[stack.size()];
for(int i=0;i<stack.size();i++) {
answer[i] = stack.get(i).intValue();
}
return answer;
}
}
- stack에 첫 번째 값을 넣고, for문에서는 첫 번째 인덱스와 그 다음 인덱스를 비교하고 같지 않으면 stack에다가 넣기
- stack.get(i).intValue()로 stack 형을 int형으로 바꿀 수 있다..!
2. ArrayList를 이용한 풀이
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> list = new ArrayList<>();
for(int i=0;i<arr.length-1;i++) {
if(arr[i] != arr[i+1]) list.add(arr[i]);
}
list.add(arr[arr.length-1]);
int[] answer = new int[list.size()];
for(int i=0;i<list.size();i++) {
answer[i] = list.get(i).intValue();
}
return answer;
}
}
- stack을 이용한 풀이에서 for문의 i가 1로 시작해서 크기는 그대로 하고, if문의 arr[i-1] 와 arr[i]를 비교했다면, arraylist 풀이에서는 약간 다르게 하고 싶어서 for문의 i가 0으로 시작해서 크기는 arr[i]와 arr[i+1] 를 비교했다.
- 그래서 이 풀이에서는 마지막 요소가 들어가지지 않기 때문에 list.add(arr[arr.length-1])를 했다.
- 아래 arraylist => int[ ]로 변환하는 것은 stack과 동일하다!
- 시간은 stack보다 arraylist가 좀 더 빠르다..! contains 같은 메서드 쓸 거 아니면 arrayList로 해도 상관없을 것 같다.
+ ArrayList와 향상된 for문
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
int preNum = 10;
for(int num : arr) {
if(preNum != num) list.add(num);
preNum = num;
}
int[] answer = new int[list.size()];
for(int i=0; i<answer.length; i++) {
answer[i] = list.get(i).intValue();
}
return answer;
}
}
- 제한 사항에 배열 arr의 원소의 크기가 0보다 크거나 같고 9보다 작거나 작은 정수라고 되어있기 때문에 preNum을 10으로 제한을 두고 할 수 있다..! (제한 사항 잘 읽어보기..!)
- preNum = num을 안하게 되면 계속 list에 추가 되게 되기 때문에 num을 preNum에 넣어주기!
stack, hashset, arrayList계속 쓰다보니까.. 일반 배열보다 훨씬 편한것 같다..!
'algorithm > Programmers' 카테고리의 다른 글
[JAVA] 올바른 괄호 (0) | 2023.03.31 |
---|---|
[JAVA] 기능 개발 (0) | 2023.03.30 |
[JAVA] 전화번호 목록 (0) | 2023.03.29 |
[JAVA] 완주하지 못한 선수 (0) | 2023.03.28 |
[JAVA] 폰켓몬 (0) | 2023.03.28 |