
내가 생각했을때 문제에서 원하는부분
아무 원소도 들어있지 않은 빈 배열 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("]");
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.