TIL

[Java] Stack<Integer>를 int[]로 변환하기

coding-orange 2025. 7. 24. 01:26
728x90

 

프로그래머스 문제를 풀다가 Stack<Integer>를 int[]로 변환해야 하는 상황에 마주했다.

Java 에서는 Stack<Integer>를 직접 int[]로 변환할 수 없어 중간 과정을 거쳐야 한다.

 


 

 

0. int[] arr이 있다고 가정하고 그 값을 stack에 push

int[] arr = { 0, 1, 2, 3, 4 };

Stack stack = new Stack<>();

for(int i = 0; i < arr.length; i++) {
	stack.push(arr[i]);
}

 

 

1. Stack<Integer> ➡️ Integer[]

Integer[] temp = stack.toArray(new Integer[0]);
int[] answer = new int[temp.length];

 

 


 

⭐️ 잠깐, new Integer[0]는 무엇일까?

stack.toArray(new Integer[0])에서 new Integer[0]는 리턴될 배열의 타입과 구조를 지정한다. toArray의 동작 방식은 다음과 같다.

T[] toArray(T[] a)


a의 크기가 충분히 크다면 그 배열에 값을 채우지만, a의 크기가 작은 경우 같은 타입의 새 배열을 만들어서 리턴한다.

따라서 new Integer[stack.size()]와 같이 작성해도 되지만, 관용적으로 new Integer[0]을 넘겨도 내부적으로 크기에 맞춰 새 배열을 만들 수 있다.

 


 

 

2. Integer[] ➡️ int[]

for(int i = 0; i < temp.length; i++) {
	answer[i] = temp[i];
}

 

 


 

 

활용 코드는 다음과 같다.

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        
        Stack<Integer> stack = new Stack<>();
        
        for(int i = 0; i < arr.length; i++) {
            if (stack.empty() || stack.peek() != arr[i]) {
                stack.push(arr[i]);
            }
        }
        
        Integer[] temp = stack.toArray(new Integer[0]);
        int[] answer = new int[temp.length];
        
        for(int i = 0; i < temp.length; i++) {
            answer[i] = temp[i];
        }

        return answer;
    }
}

 

 

728x90