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
'TIL' 카테고리의 다른 글
[hELLO 스킨 css 편집] 이미지가 본문 영역을 벗어날 때 (0) | 2024.05.28 |
---|---|
[BadSqlGrammarException] StatementCallback; bad SQL grammar [TRUNCATE TABLE members] (0) | 2024.05.21 |
[Kotlin + SpringBoot] JaCoCo 추가하기 (0) | 2024.05.21 |
[Ubuntu] git에서 SpringBoot 프로젝트 받아오고 jar 파일 빌드 후 Script 로 jar 파일 배포하기 (0) | 2024.02.11 |
[JPA] @CreatedDate와 @LastModifiedDate (0) | 2024.01.13 |