[TIL-260223] 알고리즘: 2차원 배열의 순회, 델타 탐색

2026. 2. 24. 00:43·알고리즘

배열 순회

  • 행 우선 순회

  int i; // 행의 좌표
  int j; // 열의 좌표

  int[][] arr= {{1,2,3},{4,5,6},{7,8,10}};

  int N = arr.length; // 행의 길이
  int M = arr[0].length; // 열의 길이

  for (int i = 0; i < N; i++) {
      for(int j = 0; j < M; j++) {        
          System.out.printf("%3d", arr[i][j]);
      }
      System.out.println();
  }

 

  • 행 역 우선 순회
     

  int i; // 행의 좌표
  int j; // 열의 좌표

  int[][] arr= {{1,2,3},{4,5,6},{7,8,10}};

  int N = arr.length; // 행의 길이
  int M = arr[0].length; // 열의 길이

  for (int i = 0; i < N; i++) {
      for(int j = M-1; j >= 0; j--) {   // 마지막 인덱스 열부터 0까지
          System.out.printf("%3d", arr[i][j]);
      }
      System.out.println();
  }
  • 열 우선 순회
     

  int i; // 행의 좌표
  int j; // 열의 좌표

  int[][] arr= {{1,2,3},{4,5,6},{7,8,10}};

  int N = arr.length; // 행의 길이
  int M = arr[0].length; // 열의 길이

  for (int j = 0; j < M; j++) { 	 // 열 먼저
      for(int i = 0; i < N; i++) {     // 행 나중에
          System.out.printf("%3d", arr[i][j]);
      }
      System.out.println();
  }

 

  • 열 역 우선 순회

  int i; // 행의 좌표
  int j; // 열의 좌표

  int[][] arr= {{1,2,3},{4,5,6},{7,8,10}};

  int N = arr.length; // 행의 길이
  int M = arr[0].length; // 열의 길이

  for (int j = 0; j < M; j++) {    // 열 먼저
      for(int i = M-1; i >= 0; i--) {        // 마지막 인덱스 행부터 0까지
          System.out.printf("%3d", arr[i][j]);
      }
      System.out.println();
  }

 

  • 지그재그 순회

  int i; // 행의 좌표
  int j; // 열의 좌표

  int[][] arr= {{1,2,3},{4,5,6},{7,8,10}};

  int N = arr.length; // 행의 길이
  int M = arr[0].length; // 열의 길이

  for (int i = 0; i < N; i++) {
      //정방향
      if(i % 2 == 0) {
          for(int j = 0; j < M; j++) {
              System.out.printf("%3d", arr[i][j]);
          }
      } else { // 역방향
          for(int j = M-1; j >= 0;j--) {
              System.out.printf("%3d", arr[i][j]);
          }
      }
      System.out.println();
  }

 


델타 탐색

2차원 배열의 한 좌표에서 4방향(혹은 8방향)의 인접 배열 요소를 탐색하는 방법

  • 4방 탐색
public class Search_Delta4 {
	public static void main(String[] args) {
		int[][] arr = {{1,2,3},{4,5,6},{7,8,10}};
		// N*N
		int N = arr.length;
		// 현재 나의 좌표
		int r = 0, c = 0;
		// 상하좌우
		int[] dr = {-1, 1, 0, 0};
		int[] dc = {0, 0, -1, 1};
		for (int d = 0; d < 4; d++) {
			int nr = r + dr[d];
			int nc = c + dc[d];
			// 위치에 따라 문제 발생 할 수 있다
			// 경계확인 (둘 중 하나 선택)
			// 1. 범위안
			if (nr >= 0 && nr < N && nc >= 0 && nc < N) {
				System.out.println(arr[nr][nc]);
			}
			// 2. 범위 안이 아니면 안하겠다(버리기)
			if (nr < 0 || nr >= N || nc < 0 || nc >= N) continue;
			System.out.println(arr[nr][nc]);
		}
	}
}
  • 8방 탐색
public class Search_Delta8 {
	public static void main(String[] args) {
		int[][] arr = {{1,2,3},{4,5,6},{7,8,10}};
		// N*N
		int N = arr.length;
		// 현재 나의 좌표
		int r = 0, c = 0;
		// 상, 우상, 우, 우하, 하, 좌하, 좌, 좌상
		int[] dr = {-1, -1, 0, 1, 1, 1, 0, -1};
		int[] dc = {0, 1, 1, 1, 0, -1, -1, -1};
		for (int d = 0; d < 8; d++) {
			int nr = r + dr[d];
			int nc = c + dc[d];
			// 위치에 따라 문제 발생 할 수 있다
			// 경계확인 (둘 중 하나 선택)
			// 1. 범위안
			if (nr >= 0 && nr < N && nc >= 0 && nc < N) {
				System.out.println(arr[nr][nc]);
			}
			// 2. 범위 안이 아니면 안하겠다(버리기)
			if (nr < 0 || nr >= N || nc < 0 || nc >= N) continue;
			System.out.println(arr[nr][nc]);
		}
	}
}

 


❕느낀점

알고리즘 문제 풀이에 대한 시야가 한층 넓어진 느낌이었다.

 

최근 코테 문제를 풀면서 비교적 쉽고 간단한 문제(백준 브론즈 수준)는 그래도 시간이 주어지면 스스로 해결할 수 있었다. 하지만 2차원 배열이 등장하는 복잡한 문제만 보면 머리가 하얘지고, 어디서부터 접근해야 할지 감조차 오지 않았다. 

 

오늘 수업을 통해, 2차원 배열 순회 방법에 대한 이해가 부족했고 델타 탐색에도 익숙하지 않았던 점이 문제의 핵심 원인이었음을 깨달았다. 오늘 SWEA 달팽이 숫자 문제를 풀며 델타 탐색을 활용해 문제를 해결할 수 있었고, 비록 문제 풀이에 거의 1시간을 썼지만 이전보다 한단계 더 어려운 문제를 풀어냈다는 점에서 의미 있는 진전이었다.

 

아직은 복잡한 알고리즘 문제 풀이가 익숙하지 않아 어렵게 느껴지지만 앞으로도 차근차근 꾸준히 실력을 쌓아가야겠다.

'알고리즘' 카테고리의 다른 글

[TIL-260213] 알고리즘: 정렬, 검색(탐색)  (0) 2026.02.17
'알고리즘' 카테고리의 다른 글
  • [TIL-260213] 알고리즘: 정렬, 검색(탐색)
hee-on
hee-on
작은 기록을 모아 꾸준히 성장해 나가는 개발 기록 공간입니다💻
  • hee-on
    희온의 dev log
    hee-on
  • 전체
    오늘
    어제
    • 전체 글 (46)
      • About (2)
      • Java (15)
      • Spring (4)
      • Spring Boot (2)
      • Front-end (6)
      • 알고리즘 (6)
        • Do it 알고리즘 코딩테스트 (자바편) (4)
      • DB (7)
      • Git (1)
      • 개발 지식 (2)
      • 일상 || 잡담 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    db
    Spring
    개발자
    Servlet
    til
    안티그래비티
    소개
    Java
    react
    JavaScript
    알고리즘
    취준
    백엔드
    MVC
    SpringBoot
    JSP
    SQL
    백준
    깃허브 코파일럿
    코테
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hee-on
[TIL-260223] 알고리즘: 2차원 배열의 순회, 델타 탐색
상단으로

티스토리툴바