From 7a1b24cf2da74fb40e9aab81b36ee4e13bf3868e Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Sat, 5 Jul 2025 16:03:45 +0900 Subject: [PATCH] =?UTF-8?q?[20250705]=20BOJ=20/=20G3=20/=20=ED=94=BC?= =?UTF-8?q?=EB=A6=AC=20=EB=B6=80=EB=8A=94=20=EC=82=AC=EB=82=98=EC=9D=B4=20?= =?UTF-8?q?/=20=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4 \354\202\254\353\202\230\354\235\264.md" | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 "lkhyun/202507/5 BOJ G3 \355\224\274\353\246\254 \353\266\200\353\212\224 \354\202\254\353\202\230\354\235\264.md" diff --git "a/lkhyun/202507/5 BOJ G3 \355\224\274\353\246\254 \353\266\200\353\212\224 \354\202\254\353\202\230\354\235\264.md" "b/lkhyun/202507/5 BOJ G3 \355\224\274\353\246\254 \353\266\200\353\212\224 \354\202\254\353\202\230\354\235\264.md" new file mode 100644 index 00000000..91485cdc --- /dev/null +++ "b/lkhyun/202507/5 BOJ G3 \355\224\274\353\246\254 \353\266\200\353\212\224 \354\202\254\353\202\230\354\235\264.md" @@ -0,0 +1,91 @@ +```java +import java.util.*; +import java.io.*; + +public class Main{ + static class pos{ + int i,j; + pos(int i,int j){ + this.i=i; + this.j=j; + } + + @Override + public boolean equals(Object obj) { + if(this == obj) return true; + if(obj == null || getClass() != obj.getClass()) return false; + pos other = (pos)obj; + return i==other.i && j==other.j; + } + + @Override + public int hashCode() { + return Objects.hash(i, j); + } + } + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static int N,M; + static pos[][] parent; + public static void main(String[] args) throws Exception{ + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + parent = new pos[N][M]; + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + parent[i][j] = new pos(i,j); + } + } + + for (int i = 0; i < N; i++) { + String line = br.readLine(); + for (int j = 0; j < M; j++) { + char cmd = line.charAt(j); + if(cmd == 'U' && i != 0){ + merge(i,j,i-1,j); + }else if(cmd == 'D' && i != N-1){ + merge(i,j,i+1,j); + }else if(cmd == 'L' && j != 0){ + merge(i,j,i,j-1); + }else if(cmd == 'R' && j != M-1){ + merge(i,j,i,j+1); + } + } + } + Set s = new HashSet<>(); + for (int i = 0; i < N; i++) { + for (int j = 0; j < M; j++) { + s.add(find(i,j)); + } + } + bw.write(s.size()+""); + bw.close(); + } + static pos find(int i,int j){ + if(parent[i][j] != null){ + if(parent[i][j].i == i && parent[i][j].j == j){ + return parent[i][j]; + } + else{ + return parent[i][j] = find(parent[i][j].i,parent[i][j].j); + } + } + return null; + } + static void merge(int i,int j,int k,int l){ + pos a = find(i,j); + pos b = find(k,l); + + if(a != null && b != null){ + if(a.equals(b)){ + return; + }else{ + parent[a.i][a.j] = b; + } + } + } +} +```