재밌고 어려운 IT를 이해해보자~!
배열 본문
배열은 공간의 위치 -> 참조 -> 접근 -> 사용
배열은 일반 상수처럼 복사하면 주소값을 전해준다.
int[] array01 = {1,2,5,4,5};
int[] array02 = null;
array02 = array01; 얕은 복사
int[] a = {1,2,3,4,} ;
int{} b = a ; 를 하면 같은 주소를 공유해서 a의 원소를 바꾸면 b도 같이 바뀐다.
하지만 반복문을 통해서 하나하나씩 대입하면 두개는 다른 주소값을 갖는 배열이 된다.
깊은복사를 해서 서로에게 영향을 안주는 배열을 복사하고 싶다면 복사메서드를 사용한다.
복사 메서드 이용 깊은 복사
System.arraycopy(card, 1, newcard, 0, newcard.length);
복사대상, 복사시작위치, 복사해올공간, 시작위치, 어디까지
sort 메서드를 사용하면 내림차순 또는 오름차순으로 배열을 정렬 할 수 있다.
오름차순 정렬 메서드
Arrays.sort(arr01);
내림차순 정렬의 경우 sort에 추가적인 메서드를 이용해야한다.
Arrays.sort(arr03,Comparator.reverseOrder());
2차원배열
2차원 배열을 1차로 출력하면 각각의 배열이 가진 주소를 알려준다.
int[][] arr5 = new int[3][]; 과 같이 열을 쓰지 않고 선언 할 수 있다.
// 마방진 만들기 조건!
// 1. 대각선 오른쪽으로만 이동
// 2. row가 넘어가면 해당 column의 제일 마지막으로 이동
// 3. column이 넘어가면 해당 row의 첫번째로 이동
// 4. 둘다 넘어가면 직전값 밑으로 이동
// 5. 이동위치에 값이 있으면 바로 아래로 이동
int[][] mabangjin = new int[5][5];
int row = 0; //현재위치
int col = 2; //현재위치
mabangjin[row][col] = 1;
for (int i=2; i<=25; i++) {
row--;
col++;
//row 벗어나면 ?
if (row<0 && col<5) {
row=4;
}
//column 벗어나면 ?
if (col>4 && row>=0) {
col=0;
}
//둘다 벗어나면 ?
if (row<0 && col>4) {
row+=2;
col--;
}
//이동위치에 값이 이미 있으면
if (mabangjin[row][col] != 0) {
row+=2;
col--;
}
mabangjin[row][col] = i;
}
for (int i=0 ; i<mabangjin.length; i++) {
System.out.println(Arrays.toString(mabangjin[i]));
}
2차원 배열과 반복문을 통해서 마방진을 만들 수 있다.
마방진을 만드는 조건만 잘 생각하면 쉽게 만들 수 있을 것 같...다.
Comments