반응형
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 = {{1, 0}, {-1, 0}, {0, 1}, {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 |