본문 바로가기

자바 JAVA

배열복사 문제풀이 - 자바 기초

배열은 선언과 동시에 크기가 정해진다.

 

이는 선언된 배열에 새로운 데이터를 추가하려 할 때 단점으로 작용한다.

 

배열복사는 이를 해결하는 기법의 하나로,

보다 큰 배열을 새로 만들고, 이전배열로부터 데이터를 복사하는 것이다.

 

for문을 이용하거나, system.arraycopy() 메소드를 이용한다.


  문제) for문을 이용하여 출력예와 같이 출력 (배열복사 이용) 

출력예)

[변경전]
arr.length : 5
arr[0] : 1
arr[1] : 2
arr[2] : 3
arr[3] : 4
arr[4] : 5
[변경후]
arr.length : 10
arr[0] : 1
...
arr[4] : 5
arr[5] : 0
...
arr[9] : 0

 

package sample;

public class Sample
{
	public static void main(String[] args)
	{
		int[] arr = new int[5];
		int i;

		System.out.println("[변경전]");
		System.out.println("arr.length : " + arr.length);
		for( i=0; i<arr.length; i++)
		{
			arr[i] = i+1;
			System.out.println("arr[" + i + "] : "+ arr[i]);
		}

		int[] tmp = new int[arr.length*2];

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

		arr = tmp;

		System.out.println("[변경후]");
		System.out.println("arr.length : " + arr.length);

		for( i=0; i<arr.length; i++)
		{
			System.out.println("arr[" + i + "] : " + arr[i]);
		}
	}
}

  문제) 다음의 결과를 출력 (배열복사이용) 

ABCD
0123456789
ABCD0123456789
ABCD456789
ABCD45ABC9

 

package sample;

public class Sample
{
	public static void main(String[] args)
	{
		char[] abc = new char[]{'A','B','C','D'};
		char[] num = new char[]{'1','2','3','4','5','6','7','8','9'};

		System.out.println(abc);
		System.out.println(num);

		char[] plus = new char[abc.length + num.length];

		System.arraycopy(abc, 0, plus, 0, abc.length);
		System.arraycopy(num, 0, plus, abc.length, num.length);
		System.out.println(plus);

		System.arraycopy(abc, 0, num, 0, abc.length);
		System.out.println(num);

		System.arraycopy(abc, 0, num, 6, abc.length-1);
		System.out.println(num);
	}
}