그냥.. 백준 문제 스터디하다가 기발한 방법을 발견해서 기록으로 남겨봅니다.
기존에 map[][] 같은 2차원 배열의 인덱스를 이동시킬때는
dx = { 1, 0, -1, 0 }
dy = { 0, 1, 0 , -1 }
이런 이동하는 경우의 수를 더해주면서 이동했는데
아래의 방법을 이용하면 코드가 간결하게 줄어들면서 2차원 배열의 각 인덱스를 조회 할 수 있습니다.
1. cnt = 0부터 시작하여 각 인덱스를 모두 조회 할때 까지 map.length 까지 증가시킵니다.
2. x 와 y는 몫과 나머지로 결정됩니다.
3. 나누는 값은 열의 값으로 진행됩니다. (열로 나누냐, 행으로 나누냐에 따라 경우가 다릅니다.)
package BackTracking;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj14712_넴모넴모 {
static int[][] map;
static int N, M;
static int count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String temp[] = br.readLine().split(" ");
N = Integer.parseInt(temp[0]);
M = Integer.parseInt(temp[1]);
map = new int[N][M]; // 1-index
dfs(0);
System.out.println(count);
}
/* 1. 각 칸 마다 조회
* 2. 각 칸 차례일 때 각 칸에 네모가 (있을 때, 없을때)
* 3. 현재 칸에 네모를 놓았는데 주변에 3개가 있을 때 그냥 패스 -> 못 두는 경우
* 4. 네모를 존재 여부 -> 모든 칸 조회 한 후 (count++)
*/
public static void dfs(int cnt) {
if(cnt == N*M) {
return;
}
int x = cnt / M; //열로 나눈다.
int y = cnt %M;
System.out.println(x+" "+y);
dfs(cnt+1);
}
}
'Java > Java 문법' 카테고리의 다른 글
ArrayList<Dto> Map value 값으로 정렬 (0) | 2022.01.16 |
---|---|
[JAVA] 자바 문자열 다루기 (0) | 2022.01.07 |
[JAVA] 우선순위 큐(priorityQueue) (0) | 2021.04.28 |
[java] 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm) (0) | 2021.04.28 |
[java] 선택정렬 (Select Sort) (0) | 2021.04.28 |