Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/Algorithm

[Eric's ๋ฐฑ์ค€] 1987๋ฒˆ - ์•ŒํŒŒ๋ฒณ - Java

Eric_ko 2023. 2. 13. 09:32

๋ฌธ์ œ

์˜ค๋Š˜๋„ ๋ฐฑ์ค€๋ฌธ์ œ ๋‹ฌ๋ฆฌ๋Š” 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๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ
}
}
}
view raw N1987.java hosted with โค by GitHub

 

Solved.ac ํ”„๋กœํ•„