프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열의 원소만큼 추가하기(Java)

Sigfriede 2023. 5. 21. 01:00

  문제 설명

  아무 원소도 들어있지 않은 빈 배열 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]
class Solution {
    public int[] solution(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        int[] answer = new int[sum];
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i]; j++) {
                answer[index++] = arr[i];
            }
        }
        return answer;
    }
}

  sum 변수를 생성합니다. answer 배열의 크기가 될 것입니다. for문이 arr의 길이만큼 순회합니다. sum에 arr의 i번째 원소를 더하기 할당함으로써 arr 배열의 원소를 모두 더합니다.

  answer 배열을 생성합니다. 크기는 앞서 구한 변수 sum 값입니다.

  index 변수를 생성합니다. 이는 answer 배열에 할당할 때 index를 지정할 값입니다.

  바깥 for문이 arr의 길이만큼 순회합니다. 이는 arr의 모든 원소에 접근합니다. 안쪽 for문은 arr의 i번째 원소만큼 순회합니다. answer의 index번째 원소에 arr의 i번째 원소를 할당합니다. 조금 더 풀어서 설명하면 안쪽 for문에서 arr의 i번째 원소를 answer의 index에 j만큼 할당하는 것입니다. j만큼 할당이 끝나면 i값이 증가하고, 이후 for문이 전부 끝날 때까지 동일한 내용의 반복입니다.