프로그래머스 배열의 원소만큼 추가하기

KIMYEONGJUN·2026년 7월 17일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

아무 원소도 들어있지 않은 빈 배열 X가 있습니다.
양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.

내가 이 문제를 보고 생각해본 부분

Main84 클래스 내에서 프로그래머스 스타일의 solution 메서드를 static으로 정의했다.
입력 배열 arr의 각 원소를 순회하며 처리하는 핵심 메서드다.
solution 메서드는 내부에서 가변적 크기를 관리하기 위해 ArrayList<Integer> list를 사용한다.
배열은 고정 크기라서 동적으로 확장 가능한 리스트를 활용한다.
for (int a : arr) 구문으로 입력 배열 arr의 각 원소를 하나씩 가져온다.
숫자 a를 기준으로 다음 중첩 반복문을 실행한다.
for (int i = 0; i < a; i++) 내에서 숫자 a를 a번 list에 추가한다.
예를 들어 5면 5번, 1이면 1번 추가하는 방식이다.
반복문 종료 후, 리스트에 담긴 모든 정수를 크기가 동일한 기본 배열 int[]로 변환하여 반환한다.
리스트 크기에 맞게 배열 생성 후 인덱스를 활용해 요소들을 복사한다.
main 메서드에서 테스트 케이스 배열 testCases를 선언했다.
각 테스트 배열에 대해 solution 결과를 받아 printArray 메서드로 보기 좋게 출력한다.
printArray 메서드는 배열을 [5, 5, 5, ...] 형태의 문자열로 콘솔 출력하는 유틸리티 함수다.
쉼표와 공백으로 구분하여 배열 원소들을 한 줄에 출력한다.

코드로 구현

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int a : arr) {
            for (int i = 0; i < a; i++) {
                list.add(a);
            }
        }
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }
}

프로그래머스 코드

package programmers;

import java.util.ArrayList;

// 프로그래머스 배열의 원소만큼 추가하기
public class Main84 {
    public static void main(String[] args) {
        int[][] testCases = {
                {5, 1, 4},
                {6, 6},
                {1}
        };

        for (int i = 0; i < testCases.length; i++) {
            int[] result = solution(testCases[i]);
            printArray(result);
        }
    }

    public static int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int a : arr) {
            for (int i = 0; i < a; i++) {
                list.add(a);
            }
        }
        int[] answer = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        return answer;
    }

    private static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            if (i != arr.length - 1) System.out.print(", ");
        }
        System.out.println("]");
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글