Java

[Java] 리스트를 배열로 변환하기

montmer27 2026. 1. 20. 21:25

<상황> 알고리즘 문제를 풀다가 길이가 없는 빈 배열을 어떻게 길이가 정해진 배열로 변환하는지 궁금했다.

<조사> 알고리즘 문제에서 빈 배열이 주어지고, 해당 배열에 문제 풀이 결과를 담아 반환해야 할 때, 리스트를 사용하여 문제를 해결한 뒤 리스트를 배열로 변환한다는 것을 발견했다. 관련 문제는 아래 접은글 참조

더보기
더보기

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한사항
  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

정답 템플릿

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        return answer;
    }
}

 

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        List<Integer> list = new ArrayList<>();
        for(Integer num:arr){
        	if(num % divisor == 0){
            	list.add(num);
            }
        }
        if(list.isEmpty())
        	list.add(-1);
        Collections.sort(list);
        answer = list.stream() //핵심!
        	.mapToInt(Integer:intValue)
            .toArray();
        return answer;
    }
}

 

<인사이트> 배열 변수명은 단순히 해당 배열을 가리키는 포인터에 불과하므로, 필요한 배열을 생성한 뒤 이를 해당 변수가 가리키도록 바꿔주면, 마치 배열을 바꾼 것과 같은 효과를 낼 수 있다.

 

예를 들어

int[] arr = {}; -> arr라는 정수형 배열 변수는 빈 배열의 주소를 가리키고 있지만

arr = new int[] {1, 2, 3, 4}; -> 여기선 {1,2,3,4}라는 새로운 배열의 주소를 가리키게 된다.

 

기존 배열 {}이 {1,2,3,4}로 바뀌는 것이 아니라, arr라는 변수가 가리키는 포인터 값(주소값)만 변하는 것이다.

 

나는 이 점을 간과하여, answer의 선언 위치를 이리저리 바꿔보려 했었다.

 

느낀 점

CS 기초가 많이 빈약하다는 생각이 드는 요즘이다. 자료구조, SQL, 알고리즘을 오랜 기간 공부했지만 결국 써먹을 수 있으려면 반복 숙달을 통해 실무에 적용할 수 있어야 한다. 지금까지의 전략은 기초는 가볍게, 다양한 문제 풀이를 통해 기초를 여러 차례 다시 복기함으로써 다양한 문제 유형에 대한 감각을 익히는 것이었다. 하지만 이제 전략을 수정해야 한다. 기초를 수 차례 반복하여 완전히 내 것으로 만들고, 하나의 문제를 다양한 기초 지식을 동원하여 최대한 다양하게 풀어보면서 기초를 탄탄하게 다지는 전략으로 피벗팅하자. 기본 자료구조부터 시작해서 람다, 스트림, 제네릭까지 자바의 뼈대가 되는 기본기들을 완전 내것으로 흡수한다면 그 어떠한 variation에도 대처할 수 있을 것이다. 

 

오늘의 한줄평

강함이란, 유연함이다
強さとは、しなやかさ

'Java' 카테고리의 다른 글

[자료구조] 자료구조의 크기 쉽게 계산하기  (0) 2026.02.20