본문 바로가기
온라인 저지/BOJ

[BOJ/Java] 1987 알파벳

by ahj 2022. 2. 18.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ1987 {
	static char[][] grid;
	// 4방 탐색용 delta
	static int[][] delta = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } };
	static int r, c, cnt, visited, max = Integer.MIN_VALUE;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		r = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		cnt = 0;
		grid = new char[r][];
		for (int i = 0; i < r; i++) {
			grid[i] = br.readLine().toCharArray();
		}
		visited = 0;
		runHorse(0, 0);
		System.out.println(max);
	}

	private static void runHorse(int row, int col) {
		char curVal = grid[row][col];
		visited |= 1 << curVal - 'A';
		cnt++;
		// 현재 위치에서 4방 탐색
		for (int i = 0; i < 4; i++) {
			int nRow = row + delta[i][0];
			int nCol = col + delta[i][1];
			if (nRow >= 0 && nRow < r && nCol >= 0 && nCol < c) {
				if ((visited & 1 << (grid[nRow][nCol] - 'A')) == 0) {
					runHorse(nRow, nCol);
				}
			}
		}
		// 재귀 호출 완료 됐을 때의 cnt값과 max 값 비교
		max = Math.max(max, cnt--);
		visited -= 1 << curVal - 'A';
	}
}

자꾸 감으로 하는 거 같은데 이래도 되나..

'온라인 저지 > BOJ' 카테고리의 다른 글

[BOJ/Java] 9663 N-Queen  (0) 2022.02.18
[BOJ/Java] 1931 회의실 배정  (0) 2022.02.18
[BOJ/Java] 3109 빵집  (0) 2022.02.18
[BOJ/Java] 17298 오큰수  (0) 2022.02.17
[BOJ/Java] 1992 쿼드트리  (0) 2022.02.17

댓글