๋ฌธ์

์ค๋๋ ๋ฐฑ์ค๋ฌธ์ ๋ฌ๋ฆฌ๋ Eric์ ๋๋ค!
์ค๋ ํ์ด๋ณผ ๋ฌธ์ ๋ ๋ฐฑ์ค 1987๋ฒ ์ํ๋ฒณ ์ด๋ผ๋ ๋ฌธ์ ์ ๋๋ค.
์ผ๋ฐ์ ์ธ dfs ๋ฌธ์ ๋ ๋ค๋ฅด๊ฒ,
graph๊ฐ 0๊ณผ 1๋ก ์ด๋ฃจ์ด ์ง๊ฒ์ด ์๋๋ผ,
์ํ๋ฒณ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ด๋ฏธ ์ง๋๊ฐ ์ํ๋ฒณ์ ๋ค์ ์ง๋ ์ ์๋ค๋ ์กฐ๊ฑด์ด ์์ต๋๋ค.
๊ทธ๋์ ์ ๋ ์ด ๋ถ๋ถ์ boolean[] visited = new boolean[26] ์ผ๋ก ์ค์ ํ๊ณ
๋ง์ฝ ํด๋น ์นธ์ ์ง๋๊ฐ๋ฉด, ๊ฐ์ true๋ก ๋ณ๊ฒฝํ๋๋ก ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ dfs๋ฅผ ๋๋ฉด์ ๋ง์ฝ ํด๋น graph ์์น์ ๋์ฐฉํ์๋
visited๊ฐ false ์ด๋ฉด ์,ํ,์ข,์ฐ ๋ก ์ด๋ํ๋ฉด์
dfs๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
๋ง์ฝ ๋๋ค๊ฐ visited๊ฐ true ์ด๋ฉด ์ด๋ฏธ ์ง๋๊ฐ๋ ์ํ๋ฒณ์ ๋ง๋๊ฒ์ด๋ฏ๋ก answer ์ max ๊ฐ์ผ๋ก ์ ๋ ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ 44๋ฒ์ค์์ false ๋ก ๋ง๋ ์ด์ ๋
์ด๋ฏธ ์ง๋๊ฐ max ๊ฐ ๋ณด๋ค ๋ ๋์ max ๊ฐ์ด ๋์ฌ ์ ์๋ ๋ค๋ฅธ dfs ๊ฒฝ๋ก๋ฅผ ์ง๋๊ฐ๊ธฐ ์ํด์
์ด๊ธฐํ ํด์ค๋๋ค.
์ฝ๋
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
import java.util.*; | |
public class N1987 { | |
static int R, C; | |
static int[][] graph; | |
static boolean[] visited = new boolean[26]; // ์ํ๋ฒณ์ด 26๊ฐ ๋๊น | |
static int[] dx = {1, 0, 0, -1}; | |
static int[] dy = {0, 1, -1, 0}; | |
static int answer = 0; | |
public static void main(String[] args) throws IOException { | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
StringTokenizer st = new StringTokenizer(br.readLine()); | |
R = Integer.parseInt(st.nextToken()); | |
C = Integer.parseInt(st.nextToken()); | |
graph = new int[R][C]; | |
for (int i = 0; i < R; i++) { | |
String tmp = br.readLine(); | |
for (int j = 0; j < C; j++) { | |
graph[i][j] = tmp.charAt(j) - 'A'; | |
} | |
} | |
dfs(0, 0, 0); | |
System.out.println(answer); | |
br.close(); | |
} | |
public static void dfs(int x, int y, int cnt) { | |
if (visited[graph[x][y]]) { // ์ด๋ฏธ ์ง๋๊ฐ ์ํ๋ฒณ์ด๋ฉด true | |
answer = Math.max(answer, cnt); // ์ง๋๊ฐ ๊ณณ์ ์ํ๋ฒณ์ ๋ค์ ๋ง๋ฌ๋ค๋ฉด answer ๋ cnt. | |
return; | |
} else { | |
visited[graph[x][y]] = true; // ํ์ฌ ๋ง์ด ์๋ ๊ณณ์ ์ํ๋ฒณ ์ฒดํฌ | |
for (int i = 0; i < 4; i++) { | |
int nx = x + dx[i]; | |
int ny = y + dy[i]; | |
if (nx >= 0 && ny >= 0 && nx < R && ny < C) { | |
dfs(nx, ny, cnt + 1); // cnt ์ฆ๊ฐ | |
} | |
} | |
visited[graph[x][y]] = false; // ๋ค๋ฅธ ๋ฃจํธ๋ก dfs๋ฅผ ํ์ํ๊ธฐ ์ํด์ | |
} | |
} | |
} |

'๐ป ๊ฐ๋ฐ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Eric's ๋ฐฑ์ค] 10799๋ฒ - ์ ๋ง๋๊ธฐ - Java (0) | 2023.02.15 |
---|---|
[Eric's ๋ฐฑ์ค] 13900๋ฒ - ์์์์ ๊ณฑ์ํฉ - Java (0) | 2023.02.14 |
[Eric's ๋ฐฑ์ค] 27465๋ฒ - ์์๊ฐ ์๋ ์ - Java - KSA Automata Winter Contest (0) | 2023.02.12 |
[Eric's ๋ฐฑ์ค] 27467๋ฒ - ์ํ ํด์ฆ - Java - KSA Automata Winter Contest (0) | 2023.02.12 |
[Eric's ๋ฐฑ์ค] 1759๋ฒ - ์ํธ ๋ง๋ค๊ธฐ - JAVA (2) | 2023.02.11 |