중복되는 숫자만 배열 순서대로 출력하기
import java.util.*;
public class Solution {
public int[] solution(int []arr) {
Stack<Integer> stack = new Stack<>();
for (int num : arr) {
if (stack.isEmpty() || stack.peek() != num) {
stack.push(num);
}
}
int[] answer = new int[stack.size()];
for (int i = stack.size() - 1; i >= 0; i--) {
answer[i] = stack.pop();
}
return answer;
}
}
- Stack<Integer> stack = new Stack<>();: 정수를 저장할 수 있는 스택 인스턴스를 생성합니다. 이 스택은 중복되지 않는 숫자들을 저장하는 데 사용될 것입니다.
- if (stack.isEmpty() || stack.peek() != num) { ... }: 스택이 비어있거나 스택의 맨 위에 있는 값이 현재 숫자 num과 다를 경우에만 아래의 블록을 실행합니다. 즉, 중복되지 않는 숫자일 경우에만 스택에 추가합니다.
- stack.push(num);: 현재 숫자 num을 스택에 추가합니다.
- int[] answer = new int[stack.size()];: 스택에 저장된 숫자의 개수만큼 배열을 생성합니다. 이 배열은 중복되지 않은 숫자들을 저장할 것입니다.
- for (int i = stack.size() - 1; i >= 0; i--) { ... }: 스택의 맨 위부터 순서대로 값을 꺼내어 answer 배열에 저장합니다. 스택은 LIFO 구조이므로, 먼저 들어간 값이 나중에 나오도록 배열에 역순으로 저장합니다.
- answer[i] = stack.pop();: 현재 스택의 맨 위에 있는 값을 꺼내어 answer 배열의 i 인덱스에 저장하고, 스택에서 해당 값을 제거합니다.
스택(Stack)
데이터를 저장하는 선형 자료구조,데이터가 쌓이는 구조
스택은 LIFO(Last In First Out) 원칙 (가장 최근에 추가된 항목이 가장 먼저 제거되는 구조)
- Push: 데이터를 스택에 추가합니다. 이때 추가된 데이터는 스택의 맨 위에 위치하게 됩니다.
- Pop: 스택의 맨 위에 있는 데이터를 제거하고 반환합니다. 가장 최근에 추가된 데이터가 제거됩니다.
- Peek (또는 Top): 스택의 맨 위에 있는 데이터를 반환하지만 제거하지는 않습니다.
- isEmpty: 스택이 비어있는지 여부를 확인합니다.
'ㅋㅌ' 카테고리의 다른 글
[JAVA] 중복방지 set (0) | 2023.08.27 |
---|---|
[SQL] DATEDIFF, CASE (0) | 2023.08.27 |
[java]최대공약수 최소공배수 (0) | 2023.08.26 |
[SQL] 평균, 반올림 (0) | 2023.08.25 |
IS NOT NULL (0) | 2023.08.25 |