백준 2210 숫자판 점프 (Java,자바)

jonghyukLee·2022년 2월 8일
0

이번에 풀어본 문제는
백준 2210번 숫자판 점프 입니다.

📕 문제 링크

❗️코드

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

public class Main {
    static String [][] map;
    static int [] dx = {-1,1,0,0};
    static int [] dy = {0,0,-1,1};
    static Set<String> hs;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        map = new String[5][5];

        for(int i = 0; i < 5; ++i)
        {
            st = new StringTokenizer(br.readLine());
            for(int j =0; j < 5; ++j)
            {
                map[i][j] = st.nextToken();
            }
        }

        hs = new HashSet<>();
        for(int i = 0; i < 5; ++i)
        {
            for(int j = 0; j < 5; ++j)
            {
                dfs(i,j,map[i][j],1);
            }
        }
        System.out.println(hs.size());
    }
    static void dfs(int x, int y, String str,int len)
    {
        if(len == 6)
        {
            hs.add(str);
            return;
        }
        for(int idx = 0; idx < 4; ++idx)
        {
            int mx = x + dx[idx];
            int my = y + dy[idx];

            if(!isValid(mx,my)) continue;
            dfs(mx,my,str+map[mx][my],len+1);
        }
    }
    static boolean isValid(int x, int y)
    {
        return x >= 0 && y >= 0 && x < 5 && y < 5;
    }
}

📝 풀이

임의의 칸으로부터 사방으로 5번 이동하여 길이6의 숫자를 만든다고 할 때, 중복없이 만들 수 있는 숫자의 총 갯수를 구하는 문제입니다. 갔던곳을 또 가도 상관없다는 조건이 있습니다.
시작 인덱스를 선택하여 길이가 6이 될때까지 사방으로 계속 이동해주고, 길이가 6이 되었을 때 set에 담아주면 됩니다. set은 중복값을 가지지 않기 때문에, set을 활용하면 따로 중복값을 처리해주지 않아도 정답을 구할 수 있습니다.

📜 후기

갔던 경로를 다시 갈 수 있다는 조건 덕분에 좀 더 쉽게 해결할 수 있었던 것 같습니다!

profile
머무르지 않기!

0개의 댓글