배열의 원소만큼 추가하기
문제 #
아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr
가 매개변수로 주어질 때, arr
의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.
- 제한사항
- 1 ≤
arr
의 길이 ≤ 100 - 1 ≤
arr
의 원소 ≤ 100
- 1 ≤
- 입출력 예
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];
으로 변경하여 선언과 초기화를 동시에 할 수 있음
- 3번째 줄의 선언을 지우고 11번째 줄을