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

yihyun·2025년 4월 28일

코딩테스트

목록 보기
80/105
post-thumbnail

배열의 원소만큼 추가하기

✅ 문제 설명

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

✅ 제한사항

1 ≤ arr의 길이 ≤ 100
1 ≤ arr의 원소 ≤ 100

🔽 소스코드 1 (Arrays.fill() 사용)

📌 사전 학습

  • Arrays.fill() 은 특정 배열에 시작 인덱스 ~ 종료 인덱스 까지 특정 값을 넣을 수 있는 메서드이다.
  • 사용 방법은 Arrays.fill(배열, 시작인덱스, 종료인덱스, 넣을 값) 으로 사용해줄 수 있다.

💻 풀이

  • 배열의 길이를 구하기 위해 주어진 배열의 각 수를 더해 새로운 배열을 선언해준다.
  • 이후 반복문을 이용해 주어진 배열의 0번 인덱스 부터
  • Arrays.fill() 메서드를 이용해 배열의 특정 인덱스에 있는 값을 넣어준다.

시간 0.03ms ~ 0.19ms

	public int[] solution1(int[] arr) {
		
		int count = 0;
		
		for(int num : arr) {
			count += num;
		}
		
		int[] numArr = new int[count];

		int j = 0;
		
		for(int i = 0; i < arr.length; i++) {
			
			Arrays.fill(numArr, j, arr[i] + j, arr[i]);
			j += arr[i];
		}
		
		return numArr;
	}

🔽 소스코드 2 (List, stream 사용)

💻 풀이

  • 배열의 길이를 미리 계산하지 않기 위해 List 를 선언해 준다.
  • 이후 반복문을 통해 배열의 각 인덱스의 값 만큼 추가로 반복해주며 값을 넣어준다.
  • 이후 stream을 통해서 Integer를 int로 변환하고 최종적으로 toArray() 를 이용해 배열로 변환해 return해준다.

시간 2.73ms ~ 4.91ms

	public int[] solution(int[] arr) {
		
		List<Integer> list = new ArrayList<>();
		
		for(int i = 0; i < arr.length; i++) {
			
			for(int j = 0; j < arr[i]; j++) {
				list.add(arr[i]);
			}
			
		}
		
		return list.stream().mapToInt(i -> i).toArray();
	}
profile
개발자가 되어보자

0개의 댓글