본문 바로가기

개발 정보/Memo

[알고리즘 Tip] 2차원 배열 상하좌우 이동

반응형






2차원 배열에서 상,하,좌,우 이동 필요시

참고 : 백준 2187 - 미로 탐색 https://www.acmicpc.net/problem/2178

주로 BFS 문제 풀이에서 활용하게 되는 2차원 배열 상,하,좌,우 이동


익숙하지 않은 많은 사람들(나 포함)이 처음엔 if문을 잔뜩 써서 next 이동 방향을 정하기 일쑤다.

이 상황에서 활용할 수 있는 좋은 방법이 있다.



바로 Direction array를 따로 만드는 것이다.

바로 코드부터 보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
 
// next 방향 전환을 위한 4x2 배열
int [][]direction = {{10}, {-10}, {01}, {0-1}};
 
...
 
// (0, 0)에서 시작
int curX = 0;
int curY = 0;
 
...
 
for(int i = 0; i < 4; i++){
    int nextX = curX + direction[i][1];
    int nextY = curY + direction[i][0];
 
    if(/* 배열 범위를 벗어나지 않았는지 check */ && 
       /* check 배열을 통해 방문한 적이 없는지 check*/ &&
       /* 다음 좌표에 길이 있는지 check */){
            // To Do Something..
    }
 
...
cs


이렇게 코딩이 가능하다.

다음 방향이 Up, Down, Left, Right 중 무엇이 가능한지,

그 방향에 길이 있는지 경우의 수를 다 따져서 true일 경우 이동하게 된다.


위 예제(미로탐색)에서는 길을 1로 나타내고, 길이 아니면 0이기 때문에 조건문에 Map Value가 1이면 이동하면 된다.


딱히 direction 배열의 index 순서나 for 문 안의 nextX, nextY 값 순서는 신경쓰지 않아도 될 것 같다.

어차피 모든 방향의 경우의 수를 다 따질 것이기 때문에..




반응형

'개발 정보 > Memo' 카테고리의 다른 글

Git bash로 Github에 프로젝트 업로드하기  (0) 2019.03.21
ASCII 코드 활용  (0) 2019.03.13