Java/Java 문법

[Java] Map 모든 인덱스 조회하기

민돌v 2021. 7. 22. 16:24

그냥.. 백준 문제 스터디하다가 기발한 방법을 발견해서 기록으로 남겨봅니다.

기존에 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);
			
		
	}

}