。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

ㅋㅌ

[JAVA] STACK

quarrrter 2023. 8. 26. 16:25

중복되는 숫자만 배열 순서대로 출력하기

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;
    }
}
  1. Stack<Integer> stack = new Stack<>();: 정수를 저장할 수 있는 스택 인스턴스를 생성합니다. 이 스택은 중복되지 않는 숫자들을 저장하는 데 사용될 것입니다.
  2. if (stack.isEmpty() || stack.peek() != num) { ... }: 스택이 비어있거나 스택의 맨 위에 있는 값이 현재 숫자 num과 다를 경우에만 아래의 블록을 실행합니다. 즉, 중복되지 않는 숫자일 경우에만 스택에 추가합니다.
  3. stack.push(num);: 현재 숫자 num을 스택에 추가합니다.
  4. int[] answer = new int[stack.size()];: 스택에 저장된 숫자의 개수만큼 배열을 생성합니다. 이 배열은 중복되지 않은 숫자들을 저장할 것입니다.
  5. for (int i = stack.size() - 1; i >= 0; i--) { ... }: 스택의 맨 위부터 순서대로 값을 꺼내어 answer 배열에 저장합니다. 스택은 LIFO 구조이므로, 먼저 들어간 값이 나중에 나오도록 배열에 역순으로 저장합니다.
  6. answer[i] = stack.pop();: 현재 스택의 맨 위에 있는 값을 꺼내어 answer 배열의 i 인덱스에 저장하고, 스택에서 해당 값을 제거합니다.

스택(Stack)

데이터를 저장하는 선형 자료구조,데이터가 쌓이는 구조

스택은 LIFO(Last In First Out) 원칙 (가장 최근에 추가된 항목이 가장 먼저 제거되는 구조)

  1. Push: 데이터를 스택에 추가합니다. 이때 추가된 데이터는 스택의 맨 위에 위치하게 됩니다.
  2. Pop: 스택의 맨 위에 있는 데이터를 제거하고 반환합니다. 가장 최근에 추가된 데이터가 제거됩니다.
  3. Peek (또는 Top): 스택의 맨 위에 있는 데이터를 반환하지만 제거하지는 않습니다.
  4. 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