Hamutaro - Hamtaro 4

Algorithm/BOJ

[Silver II/JAVA] 2210 ์ˆซ์žํŒ ์ ํ”„

carsumin 2024. 12. 12. 14:55

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

 

 

์กฐ๊ฑด
  • ์ˆซ์žํŒ์˜ ํฌ๊ธฐ๋Š” 5*5
  • ์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์„ฏ๋ฒˆ ์ด๋™ (์œ„, ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ, ์™ผ์ชฝ)
  • ํ•œ ๋ฒˆ ๊ฑฐ์ณค๋˜ ์นธ์„ ๋‹ค์‹œ ๊ฑฐ์ณ๋„ ๋จ = ๋ฐฉ๋ฌธ ์ฒดํฌ ํ•„์š”์—†์Œ
  • ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ์„ฏ ์ž๋ฆฌ ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
ํ•„์š”ํ•œ ๊ฒƒ
  • ์ˆซ์žํŒ(grid) 2์ฐจ์› ๋ฐฐ์—ด
  • ๋ฐฉํ–ฅ ์ด๋™์„ ์œ„ํ•œ ๋ฐฐ์—ด dx, dy
  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” Set
ํ’€์ด
  • grid 2์ฐจ์› ๋ฐฐ์—ด์— ๊ฐ’ ์ž…๋ ฅ๋ฐ›๊ธฐ
  • ๊ฐ๊ฐ์˜ ์ •์ (์ˆซ์žํŒ์˜ ์ˆซ์ž)์—์„œ DFS ํƒ์ƒ‰ํ•˜๊ธฐ
  • ์ธ์ ‘ํ•œ ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™
int[] dx = {1, -1, 0, 0};
int[] dy = {0, 0, 1, -1};

/*
์•„๋ž˜ : dx=1 dy=0 -> ํ–‰ ๋ฒˆํ˜ธ 1์ฆ๊ฐ€ x+1
์œ„ : dx=-1 dy=0 -> ํ–‰ ๋ฒˆํ˜ธ 1๊ฐ์†Œ x-1
์˜ค๋ฅธ์ชฝ : dx=0 dy=1 -> ์—ด ๋ฒˆํ˜ธ 1์ฆ๊ฐ€ y+1
์™ผ์ชฝ : dx=0 dy=-1 -> ์—ด ๋ฒˆํ˜ธ 1๊ฐ์†Œ y-1
*/
  • grid ๋‚ด์— ์กด์žฌํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋ฉด์„œ DFS ํƒ์ƒ‰, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 6์ด ๋˜๋ฉด ํƒ์ƒ‰ ์ข…๋ฃŒํ•˜๊ณ  set์— ๊ฒฐ๊ณผ ์ €์žฅ
  • Set ์ž๋ฃŒ๊ตฌ์กฐ : ์ค‘๋ณต๋œ ๊ฐ’ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ, ์ˆœ์„œ ์—†์Œ
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A");
System.out.println(set); //์ถœ๋ ฅ : [A,B] (์ˆœ์„œx)
  • set์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋œ๋‹ค.
์ „์ฒด ์ฝ”๋“œ
import java.io.*;
import java.util.*;

public class Main{
    static int[][] grid = new int[5][5];
    static int[] dx = {1, -1, 0, 0};
    static int[] dy = {0, 0, 1, -1};
    static Set<String> set = new HashSet<>();
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        //grid ์ดˆ๊ธฐํ™”
        for(int i=0; i<5; i++){
            String[] str = br.readLine().split(" ");
            for(int j=0; j<5; j++){
                grid[i][j] = Integer.parseInt(str[j]);
            }
        }
        
        //DFS ํƒ์ƒ‰ ๋ชจ๋“  ์ •์ ์—์„œ
        for(int i=0; i<5; i++){
            for(int j=0; j<5; j++){
                dfs(i, j, "", 0); //์ •์ ์œ„์น˜ i,j , ๋ฌธ์ž์—ด, ์ด๋™ํšŸ์ˆ˜
            }
        }
        
        //์ถœ๋ ฅ
        System.out.println(set.size());
    }
    
    private static void dfs(int x, int y, String path, int depth){
        
        if(depth == 6){ //6์ž๋ฆฌ
            set.add(path);
            return;
        }
        
        //ํ˜„์žฌ ์œ„์น˜์˜ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€
        path += grid[x][y];
        
        //๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ (์œ„, ์•„๋ž˜, ์˜ค๋ฅธ, ์™ผ)
        for(int i=0; i<4; i++){
            int nx = x + dx[i];
            int ny = y + dy[i];
            
            //grid๋‚ด์— ์œ„์น˜ํ•˜๋Š”์ง€ ์ฒดํฌ -> ๊ณ„์† dfsํƒ์ƒ‰
            if(nx >= 0 && nx < 5 && ny >= 0 && ny < 5){
                dfs(nx, ny, path, depth+1);
            }
        }
    }
}