728x90
동적가변배열

 

배열의 길이를 동적으로, 필요시에 생성하는 것

 

동적가변배열이 아닌 것은 처음부터 배열의 길이를 초기화 해서 만들어 사용하지만,

동적가변배열은 필요시에 필요한 만큼 만들어서 사용한다.

 

ex)

int[][] arr = new int[3][];			//내부를 비워두었을 때의 값 : null
int[][] arr2 = new int[3][0];			//내부의 값이 0일 때의 값 : []

for (int[] is : arr) {
	System.out.print(Arrays.toString(is));
}
		
for (int[] is : arr2) {
	System.out.print(Arrays.toString(is));
}

[실행결과]

null
null
null
[]
[]
[]


예제 1.

<길이와 크기가 1씩 증가하는 동적가변배열>

int[][] arr = new int[5][];				//내부를 비워두고 선언
		
for (int i = 0; i < arr.length; i++) {
	arr[i] = new int[i + 1];			//arr[]의 길이가 1씩 증가하는 배열 만들기
	
	for (int j = 0; j < arr[i].length; j++) {
		arr[i][j] = (i + j) + 1;
	}
}
for (int[] cs : arr) {
	System.out.println(Arrays.toString(cs));
}

[실행결과]

[1]
[2, 3]
[3, 4, 5]
[4, 5, 6, 7]
[5, 6, 7, 8, 9]

예제 2.

<랜덤한 길이와 크기의 동적가변배열>

  • 배열의 길이는 1 ~ 5 사이의 정수로, 배열의 크기는 1 ~ 10 사이의 정수로 한다.
int[][] arr = new int[5][];

for (int i = 0; i < arr.length; i++) {
	arr[i] = new int[(int)(Math.random() * 5 + 1)]; 	//1 ~ 5 사이의 정수

	for (int j = 0; j < arr[i].length; j++) {
		arr[i][j] = (int)(Math.random() * 10 + 1);	//1 ~ 10 사이의 정수
	}
}
		
for (int[] is : arr) {
	System.out.println(Arrays.toString(is));
}

[3회 실행결과]

[3]
[9, 10, 6, 9]
[3]
[9, 2, 1, 7, 3]
[5, 7, 5, 9, 10]

[5]
[10, 3, 8, 9, 9]
[10, 9]
[2, 8]
[3, 2, 10, 8]

[1, 9, 2]
[1, 4]
[6, 10, 9, 8]
[8, 2]
[8, 4, 4]

'JAVA' 카테고리의 다른 글

currentTimeMillis  (0) 2021.07.14
Date / Calendar / SimpleDateFormat  (0) 2021.07.14
배열 복사 (ArrayCopy)  (0) 2021.07.13
isDigit  (0) 2021.07.11
charAt  (0) 2021.07.09
728x90
System.arraycopy( ) 배열복사

 

ex)

System.arraycopy(src(원본), srcPos(원본 시작위치 설정), dest(값을 담을 배열), 
		destPos(배열 위치  설정), length(담을 길이 설정));

 


여러종류의 복사 방법

 

얕은 복사

 

객체의 주소값이 복사된 배열복사

원본 배열이 변경되면 복사된 배열 또한 변경된다.

 

ex)

int[] arr01 = {10, 20, 30};
int[] arr02 = new int[3];			//[0, 0, 0]

arr02 = arr01;
System.out.println(Arrays.toString(arr02));

arr01[0] = 100;
System.out.println(Arrays.toString(arr02));

[실행결과]

[10, 20, 30]
[100, 20, 30]


깊은 복사

 

객체의 값이 복사된 배열복사

원본 배열이 변경되어도 복사된 배열은 변경되지 않는다.

 

ex)

<For>

int[] arr01 = {10, 20, 30};
int[] arr02 = new int[3];			//[0, 0, 0]

for (int i = 0; i < arr02.length; i++) {
	arr02[i] = arr01[i];
}
	
arr01[0] = 100;

System.out.println(Arrays.toString(arr01));
System.out.println(Arrays.toString(arr02));

[실행결과]

[100, 20, 30]
[10, 20, 30]

 

 

<ArrayCopy>

int[] arr01 = {10, 20, 30};
int[] arr02 = new int[10];			//[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
	        
System.arraycopy(arr01, 0, arr02, 1, arr01.length);
		
arr01[0] = 100;

System.out.println(Arrays.toString(arr01));
System.out.println(Arrays.toString(arr02));

[실행결과]

[100, 20, 30]
[0, 10, 20, 30, 0, 0, 0, 0, 0, 0]

 

 

<Clone>

int[] arr01 = {10, 20, 30};
int[] arr02 = new int[10];
		
System.out.println(Arrays.toString(arr02));
		
arr02 = arr01.clone();				
arr01[0] = 100;
		
System.out.println(Arrays.toString(arr01));
System.out.println(Arrays.toString(arr02));

[실행결과]

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[100, 20, 30]
[10, 20, 30]

'JAVA' 카테고리의 다른 글

Date / Calendar / SimpleDateFormat  (0) 2021.07.14
동적 가변 배열 (DynamicArray)  (0) 2021.07.13
isDigit  (0) 2021.07.11
charAt  (0) 2021.07.09
toUpperCase와 toLowerCase  (0) 2021.07.09
728x90

https://codingdojang.com/scode/266?answer_mode=hide 

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com

 

ㅁㅁ
  • 가로, 세로 

'코딩도장' 카테고리의 다른 글

문자열 압축하기  (0) 2021.07.13
CamelCase를 Pothole_case 로 바꾸기!  (0) 2021.07.13
모스부호 해독  (0) 2021.07.13
728x90

https://codingdojang.com/scode/465?answer_mode=hide 

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com

 

문자열 압축하기

 

  • 문자열을 입력받아 같은 문자가 연속으로반복되는 경우 그 반복횟수를 표시하여 문자열을 압축하기
String zip = "aaabbccccccd";
char[] zipArray = zip.toCharArray();
		
String result = String.valueOf(zipArray[0]);			//a부터 시작

int number = 1;
		
for (int i = 0; i < zipArray.length - 1; i++) {
	if(zipArray[i] == zipArray[i + 1]) {			//다음으로 오는 문자와 중복될 경우
		number++;
	} else {
		result += String.valueOf(number);		//반복횟수 추가
		result += String.valueOf(zipArray[i + 1]);	//중복되지 않은 다음문자 추가
		number = 1;
	}
	if (i == zipArray.length - 2) {				//if (i + 1 == zipArray.length - 1)
		result += number;				//마지막 문자에도 횟수 표시하기
	}
}
System.out.println(result);

[실행결과]

a3b2c6d1

'코딩도장' 카테고리의 다른 글

Spiral Array  (0) 2021.07.13
CamelCase를 Pothole_case 로 바꾸기!  (0) 2021.07.13
모스부호 해독  (0) 2021.07.13

+ Recent posts