๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 26169_์„ธ ๋ฒˆ ์ด๋‚ด์— ์‚ฌ๊ณผ๋ฅผ ๋จน์ž

๋ฟŒ์•ผ._. 2023. 6. 9. 10:28

Silver III

๋ฌธ์ œ(์ถœ์ฒ˜: https://www.acmicpc.net/problem/26169)

< ์„ธ ๋ฒˆ ์ด๋‚ด์— ์‚ฌ๊ณผ๋ฅผ ๋จน์ž >

 

๋ฌธ์ œ ํ’€์ด

 

dfs๋กœ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์„ธ ๋ฒˆ์˜ ์ด๋™์„ ํ–ˆ์„ ๋•Œ ์‚ฌ๊ณผ๋ฅผ 2๊ฐœ ์ด์ƒ ๋จน์„ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

 

 

 

 my solution (Java)

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

public class _26169_ { // ์„ธ ๋ฒˆ ์ด๋‚ด์— ์‚ฌ๊ณผ๋ฅผ ๋จน์ž
	static int arr[][];
	static boolean result, visited[][];
	static int dx[] = { -1, 1, 0, 0 };
	static int dy[] = { 0, 0, -1, 1 };

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

		arr = new int[5][5];
		visited=new boolean[5][5];
		for (int i = 0; i < 5; i++) {
			st = new StringTokenizer(bf.readLine());
			for (int j = 0; j < 5; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
				if(arr[i][j]==-1) visited[i][j]=true;
			}
		}

		st = new StringTokenizer(bf.readLine());
		int r = Integer.parseInt(st.nextToken());
		int c = Integer.parseInt(st.nextToken());

		result = false;
		int num=0;
		if(arr[r][c]==1) num+=1;
		visited[r][c]=true;
		dfs(r, c, 0, num);

		if (result)
			System.out.println("1");
		else
			System.out.println("0");

	}

	private static void dfs(int r, int c, int cnt, int num) {
		if (cnt == 3) {
			if (num >= 2) {
				result = true;
				return;
			}
		}
		for(int i=0; i<4; i++) {
			int x=r+dx[i];
			int y=c+dy[i];
			if(x>=0 && x<5 && y>=0 && y<5 && !visited[x][y]) {
				visited[x][y]=true;
				if(arr[x][y]==1) {
					dfs(x,y,cnt+1, num+1);
				}else {
					dfs(x,y,cnt+1, num);
				}
				visited[x][y]=false;
			}
		}
	}
}

 

Main

-  arr : ๋ณด๋“œ์˜ ์ •๋ณด ์ž…๋ ฅ

- visited: ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ‘œ์‹œ (์žฅ์• ๋ฌผ์ด ์žˆ๋Š” ๊ฒฉ์ž๋Š” ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ)

- ํ˜„์žฌ ์œ„์น˜ r, c ์ž…๋ ฅ

- ๋งŒ์•ฝ ์ฃผ์–ด์ง„ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ์นธ์ธ์ง€ ํ™•์ธ ํ›„ ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ์นธ์ด๋ผ๋ฉด num ๊ฐ’ ์ฆ๊ฐ€ 

  ํ˜„์žฌ ์œ„์น˜๋Š” ๋ฐฉ๋ฌธํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐฉ๋ฌธ ํ‘œ์‹œ ๋ฐ dfs ํ•จ์ˆ˜ ํ˜ธ์ถœ

- result ๊ฐ’์ด true๋ฉด ์„ธ ๋ฒˆ ์ดํ•˜์˜ ์ด๋™์œผ๋กœ ์‚ฌ๊ณผ๋ฅผ 2๊ฐœ ์ด์ƒ ๋จน์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 1 ์ถœ๋ ฅ. ์‚ฌ๊ณผ๋ฅผ 2๊ฐœ ์ด์ƒ ๋จน์„ ์ˆ˜ ์—†๋‹ค๋ฉด 0 ์ถœ๋ ฅ.

 

dfs(ํ˜„์žฌ ์‹œ์ž‘ ์œ„์น˜ r, c, ์ด๋™ ํšŸ์ˆ˜, ๋จน์€ ์‚ฌ๊ณผ ์ˆ˜)

- ์ข…๋ฃŒ ์กฐ๊ฑด : 3๋ฒˆ ์ด๋™ํ–ˆ์œผ๋ฉฐ ์‚ฌ๊ณผ๋ฅผ 2๊ฐœ ์ด์ƒ ๋จน์—ˆ๋‹ค๋ฉด result๋ฅผ true๋กœ ์ €์žฅ ํ›„ ์ข…๋ฃŒ

- ์ƒํ•˜์ขŒ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ณด๋“œ ๋ฒ”์œ„ ์•ˆ์ด๋ฉฐ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธ ํ‘œ์‹œ/ ์ด๋™ํ•œ ์นธ์ด ์‚ฌ๊ณผ๊ฐ€ ์žˆ๋Š” ์นธ์ด๋ผ๋ฉด ์ด๋™ ํšŸ์ˆ˜ +1, ์‚ฌ๊ณผ ์ˆ˜ +1๋กœ dfs ํ•จ์ˆ˜ ํ˜ธ์ถœ but ์‚ฌ๊ณผ๊ฐ€ ์—†๋Š” ์นธ์ด๋ผ๋ฉด ์ด๋™ ํšŸ์ˆ˜ +1 ํ›„ dfs ํ˜ธ์ถœ / dfs ํ•จ์ˆ˜ ํ˜ธ์ถœ ํ›„ ๋‹ค์Œ ํƒ์ƒ‰์„ ์œ„ํ•ด ๋ฐฉ๋ฌธ ํ‘œ์‹œ๋ฅผ false๋กœ ์ €์žฅ

 


๋งˆ๋ฌด๋ฆฌ๐Ÿค”