Blog

배열의 원소만큼 추가하기

문제 #

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

  • 제한사항
    • 1 ≤ arr의 길이 ≤ 100
    • 1 ≤ arr의 원소 ≤ 100
  • 입출력 예
    arr result
    [5, 1, 4] [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]
    [6, 6] [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
    [1] [1]

문제분석 #

나의 풀이 #

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        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<answer.length; i++) {
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

다른 사람의 풀이 #

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

        int sum = 0;

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

        answer = new int[sum];

        int idx = 0;

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

        return answer;
    }
}
  • arr[]의 원소값을 모두 더한값이 answer[]의 크기임을 이용함
  • 이 코드에선 빈 배열을 선언한 후 새로운 배열로 초기화 하는 과정을 거침
    • 3번째 줄의 선언을 지우고 11번째 줄을 int[] answer = new int[sum]; 으로 변경하여 선언과 초기화를 동시에 할 수 있음

관련개념 학습 #