백트래킹 파라미터

Hvvany·2023년 2월 23일
0

알고리즘

목록 보기
6/12

boj 1987

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class boj1987 {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static boolean[] isUsed = new boolean[26];  // 알파벳 길이만큼 'A' -> 0
	static char[][] graph;
	static int R,C,answer = 0;
	static int[] dx = {-1,0,0,1};
	static int[] dy = {0,-1,1,0};

	private static void dfs(int i,int j, int depth) {
		if(answer < depth) {
			answer = depth;
		}
		for(int idx = 0; idx < 4; idx++) {
			int x_ = i + dx[idx];
			int y_ = j + dy[idx];
			if(0 <= x_ && x_ < R && 0 <= y_ && y_ < C) {
				if(isUsed[graph[x_][y_] - 'A'] == false) {
					isUsed[graph[x_][y_] - 'A'] = true;
					dfs(x_,y_,depth+1);
					isUsed[graph[x_][y_] - 'A'] = false;
				}
			}
		}
	}
	
	public static void main(String[] args) throws Exception{
		
		StringTokenizer st;
		st = new StringTokenizer(in.readLine()," ");
		R = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());
		// 그래프에 담기
		graph = new char[R][C];
		for(int i = 0; i < R; i++) {
			String input = in.readLine();
			for(int j = 0; j < C; j++) {
				graph[i][j] = input.charAt(j);
			}
		}
		isUsed[graph[0][0] - 'A'] = true;
		dfs(0,0,1);
		System.out.println(answer);
	}
}

재귀 호출을 할 때 ++depth 를 하니 값이 제대로 안나와서 depth + 1 로 고쳐서 풀었다.

생각해보니 반복문을 돌면서 전위, 후위연산자는 변수에 값이 더해졌다.

전/후위연산자를 사용할 때에는 잘 생각해보고 사용하자!!

profile
Just Do It

0개의 댓글