본문 바로가기
etc/[구름] 구름톤 챌린지

구름톤 챌린지 2주차 학습 일기 v2 (2차원 배열 완전 탐색, dx/dy 기법)

by 1two13 2023. 8. 23.
728x90
반응형

 

2차원 배열에서 자주 사용되는 기법인 dx/dy 기법에 정리하려고 한다. 

dx/dy 기법은 현재 내 위치에서 상화좌우, 대각선 방향으로 이동이나 탐색을 구현할 때 사용한다. 

 

예를 들어 arr[1][1]의 상하좌우 값은 arr[0][1], arr[2][1], arr[1][0], arr[1][2] 다.

이를 인덱스로 표현한다면 아래와 같다.

dx = [0, 0, -1, 1] // 열
dy = [-1, 1, 0, 0] // 행

이를 코드로 적용해보면 아래와 같다.

let dx = [0, 0, -1, 1];
let dy = [-1, 1, 0, 0];

// 시작 위치 설정
let x = 1;
let y = 1;

// 4방향 탐색
for (let i = 0; i < 4; i++) {
  let nx = x + dx[i];
  let ny = y + dy[i];
  console.log(nx, ny);
}

 

추가로 구름톤 문제에서는 대각선 방향도 포함하고 있고, 탐색을 할 때 올바른 탐색 위치인지도 확인해야 한다. 배열 밖을 나가는 탐색이 있을 수 있기 때문이다. 

// 상하좌우 + 대각선
let dx = [-1, -1, -1, 0, 0, 1, 1, 1]; // 열
let dy = [-1, 0, 1, -1, 1, -1, 0, 1]; // 행

// 시작 위치 설정
let x = 1;
let y = 1;

// 8방향 탐색
for (let i = 0; i < 8; i++) {
  let nx = x + dx[i];
  let ny = y + dy[i];
  //올바른 탐색 범위인지 확인. 배열 밖으로 나가는 탐색은 오류
  if (nx >= 0 && nx < N && ny >= 0 && ny < N) {
    console.log(nx, ny);
  }
}

 

참고자료


  • 구름톤 프로젝트 매니징 자료
728x90
반응형

댓글