Array-3

zee-chive·2024년 7월 31일
0

APS

목록 보기
3/23

2차원 배열

  • 배열 : 동일한 자료형의 data를 여러 개 담을 수 있는 자료 구조
  • 2차원 배열은 1차원 배열 들을 담을 수 있는 배열이다.
  • 배열은 JVM의 heap 영역에 들어간다.
    • 2차원 배열의 경우, 1차원 배열이, 행의 갯수만큼 생성이 된 후 그것들을 호출하는 방식이 된다.





배열 순회

  • n * m 배열의 모든 원소를 빠짐 없이 조사하는 방법

행 우선 순회

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

+> 역방향 우선순회

for(int i = 0; i<arr.length; i++) {
	for(int j = arr[i].length-1; j >= 0; j--) {
		System.out.print(arr[i][j] + " ");
	}
}

열 우선 순회

  • 더 빠르게 도는 반복문이 안쪽에 들어가야 한다. (중점이 되는 것이 바깥 for문에 존재)

지그재그 순회

  • i 가 홀수인 경우, i%2 를 통해서 j 값을 역순으로 구하는 코드를 작성할 수 있게 된다.
  • 조건문이나 삼항연산자를 쓰는 게 훨씬 낫다.
    • i%2 == 0 ? j : m - 1 -j 로 작성하면 가독성이 높아짐.





델타 : 변화량

  • 델타 배열 : 이동 후 좌표 차이를 저장해 둔 배열
public class Array_델타배열 {
	
	// 자료구조를 갖는 프로그램은 어던 것이든 동일하므로, 
	// 멤버 변수로 전역 변수를 델타 배열로 선언할 수 있다. 
	
	// 상, 하, 좌, 우 > 순서로 정렬 
	static int[] dr = {-1, 1, 0, 0};
	static int[] dc = {0, 0, -1, 1};
	
	static int[][] map = new int[5][5];
	
	static int r = 2; 
	static int c = 2;
	
	static void printMap() {
		// 상단는 r은 지역변수이고, for문의 r은 멤버 변수이므로 
		// 
		for(int i = 0; i < map.length; i++) {
			for(int j = 0; j<map[i].length; j++) {
				if (i == r && c == j) {
					System.out.print("X");
				} else {
					System.out.print("O");
				}
			}
			System.out.println();
		}
		System.out.println();
	}
	
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		printMap();
		
		while(true) {
			System.out.println("어디로 이동할까요?");
			
			int d = sc.nextInt();
			
			
//			r = r + dr[d];
//			c = c + dc[d];
			// r,c를 변경하기 전에 예외 처리
			
			int nr = r + dr[d];
			int nc = c + dc[d];
			
			if( 0 <= nc && nc < map.length && 0<= nr && nr < map.length) {
				r = nr;
				c =nc;
			} else {
				System.out.println(" 배열 밖으로 벗어났습니다. ");
				
			}
			printMap();
		}
		
	}

}


전치 행렬

  • 행 번호가 열 번호가 작을 때만 변경을 한다.

2차원 배열의 회전

  • i 행에 들어갈 값은 원래의 i 값이다.
  • j 열에 들어갈 값은 배열의 마지막 인덱스에서 -j를 한 값이다.
  • 행과 열의 값을 작성한 후 확인해보는 법이 필요하다.





다차원 배열

  • N차원 배열은 '(N-1) 차원의 배열'
  • 다차원 배열은 차원 수만큼의 index를 필요로 한다.
  • int[][][] arr = new int[3][2][2]
    • 해당 배열은 2행 3열의 2차원 배열을 3개 담을 수 있는 배열이라는 뜻
    • 가장 처음의 3은 필수적으로 입력해야 한다.
profile
누가 봐도 읽기 쉬운 글이 최고의 글이다.

0개의 댓글

관련 채용 정보