같은 숫자는 싫어

이리·2025년 1월 6일
0
post-thumbnail

문제: https://school.programmers.co.kr/learn/courses/30/lessons/12906

문제설명

  • 주어진 파라미터: int[] arr
  • 반환값: int[]
  • 배열 arr에는 숫자 0부터 9
  • 연속적으로 나타나는 숫자 하나만 남기고 모두 제거하고자 함
  • 제거된 수는 순서를 유지해야함

풀이방식

  1. arr을 돌면서 stack에 추가
  2. stack의 꼭대기랑 비교하면서 같으면 통과 다르면 stack에 추가하기
  3. 스택을 꺼내 거꾸로 배열에 넣어 return

코드

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        
        Stack<Integer> s = new Stack<>();
        s.push(arr[0]);
        
        for(int i = 1; i < arr.length; i++){
            int last = s.peek();
            
            // 꼭대기랑 같으면 통과 
            if(arr[i] == last) continue;
            else{
                // 다르면 
                s.push(arr[i]);
            }
        }
        
        // stack을 거꾸로 꺼내면서 배열에 넣기 
        int[] answer = new int[s.size()];
        for(int i = s.size()-1; i >= 0; i --){
            answer[i] = s.pop();
        }
        
        return answer;
    }
}

회고

Stack 이란?

데이터를 순서대로 쌓는 자료구조, LIFO(Last In First Out)

  • 후입선출
  • 단방향 입출력 구조
  • 데이터를 하나씩만 넣고 뺄 수 있다.

Stack 관련 메소드

  • 선언 → Stack s = new Stack<>();
  • 값 추가 → s.add(), s.push()
  • 값 제거 & 반환 → s.pop()
  • 값 전체 제거 → s.clear()
  • 가장 위 값 → s.peek()
  • 스택이 비었는지 여부 반환 → s.empty()

참 쉽쥬잉~?

0개의 댓글