티스토리 뷰

728x90

문제

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

 

2210번: 숫자판 점프

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.

www.acmicpc.net

 

풀이 및 소스코드

dfs로 돌리다가 만약 6자리 수가 완성되었다면(cnt == 5) 중복되지 않게 list에 넣어준 후, list의 size를 출력하면 된다.

import java.io.*;
import java.util.*;


class Main {
	static List<String> list = new ArrayList<>();
	static int[] dx = {-1, 1, 0, 0};
	static int[] dy = {0, 0, -1, 1};
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int res = 0;
		String[][] 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();
			}
		}
		for(int i=0;i<5;i++) {
			for(int j=0;j<5;j++) {
				dfs(map, i, j, 0, map[i][j]);
			}
		}
		System.out.println(list.size());
	}
	
	public static void dfs(String[][] m, int x, int y, int cnt, String tmp) {
		if(cnt == 5) {
			if(!list.contains(tmp)) {
				list.add(tmp);
			}
			return;
		}
		for(int i=0;i<4;i++) {
			int nowx = x+dx[i];
			int nowy = y+dy[i];
			if((0<=nowx&&nowx<5)&&(0<=nowy&&nowy<5)) {
				dfs(m, nowx, nowy, cnt+1, tmp+m[nowx][nowy]);
			}
		}
	}
}
반응형