본문 바로가기

ProgramSoliving

백준 : 16929

반응형

https://www.acmicpc.net/problem/16929

 

16929번: Two Dots

첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문��

www.acmicpc.net

 

1. DFS 탐색은 바로직전 DFS 방향으로 갈수 없다.
2. 같은 문자가 아니면 갈수없다.
3. DFS 바운마다 visit처리를한다.
4. 만약 다음 칸이 visit 처리가됬고 현재 문자와 같은 문자면 ans 값을 성공으로 바꾼다.

 

1. 번처리는 방향을 

static int dy[] = { 1, 0, -1, 0 };
static int dx[] = { 0, 1, 0, -1 };

 

이런식으로 처리한다면 (d+2)%4 는 반대방향인것을 확인 할 수있다.

 

package 삼성;

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

public class TwoDots {
	// 소요시간 32분

	static int dy[] = { 1, 0, -1, 0 };
	static int dx[] = { 0, 1, 0, -1 };
	static int N, M;
	static char map[][];
	static boolean visit[][];
	static boolean ans;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		ans = false;
		map = new char[N][M];
		visit = new boolean[N][M];

		for (int i = 0; i < N; i++) {
			map[i] = br.readLine().toCharArray();
		}

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				if (visit[i][j])
					continue;
				DFS(i, j, -1);
			}
		}

		System.out.println(ans ? "Yes" : "No");
	}

	public static void DFS(int y, int x, int pd) {
		visit[y][x] = true;

		for (int d = 0; d < 4; d++) {
			if (pd == d)
				continue;
			int ny = dy[d] + y;
			int nx = dx[d] + x;
			if (ny < 0 || nx < 0 || ny >= N || nx >= M)
				continue;
			if (map[ny][nx] != map[y][x])
				continue;
			if (visit[ny][nx] && map[y][x] == map[ny][nx]) {
				ans = true;
			}

			if (visit[ny][nx])
				continue;
			DFS(ny, nx, (d + 2) % 4);
		}
	}

}
반응형

'ProgramSoliving' 카테고리의 다른 글

백준 : 4889 안정적인 문자열  (0) 2020.05.30
백준 : 1400  (0) 2020.05.26
백준 : 8983 사냥꾼  (0) 2020.05.24
백준 : 관중석(10166) JAVA  (0) 2020.05.24
백준 : 10800  (0) 2020.05.22