[SWEA]2819:メッシュボードに接続されている数字
3042 ワード
🔗 質問リンク
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7I5fgqEogDFAXB&categoryId=AV7I5fgqEogDFAXB&categoryType=CODE
🤔 質問する
4×4つの大きさの格子板があります.メッシュボードの各メッシュには、0~9の間のメッシュがあります. 数字が書いてあります.
メッシュボード上の任意の位置から、 東西南北 隣接するグリッドを4方向に6回移動し、各セルの数値を順番に接続します. 合わせて7桁あります.
移動時に一度通過したメッシュを再配置 0で始まる0102001を作成することもできます.
ただし、グリッドの外に移動することはできないとします.
メッシュボードを指定すると、異なる 7桁の数字を求めるプログラムを作成してください.
😮 トラブルシューティング方法
深度優先探索(DFS)を使用してグリッド上のすべての数字を結合し、ハイフンの長さが7のときにSetに入れて重複する文字を除去します.
そしてSetにSizeを出力すると問題が解決します.
🚩Javaコード
package com.algorithm.SWEA.D4;
import java.io.*;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Solution_2829 {
private static Set<String> set;
private static final int[] DX = {1, -1, 0, 0};
private static final int[] DY = {0, 0, 1, -1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int TC = Integer.parseInt(br.readLine());
int[][] board = new int[4][4];
for (int N = 0; N < TC; N++) {
set = new HashSet<>();
for (int i = 0; i < 4; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < 4; j++)
board[i][j] = Integer.parseInt(st.nextToken());
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
dfs(board, i, j);
}
}
bw.write("#" + (N + 1) + " ");
bw.write(String.valueOf(set.size()));
bw.newLine();
}
br.close();
bw.close();
}
private static void dfs(int[][] board, int i, int j) {
String s = "";
dfsUtil(board, i, j, s);
}
private static void dfsUtil(int[][] board, int i, int j, String s) {
if (s.length() == 7) {
set.add(s);
return;
}
s += board[i][j];
for (int k = 0; k < DX.length; k++) {
int nx = i + DX[k];
int ny = j + DY[k];
if (nx >= 0 && nx < 4 && ny >= 0 && ny < 4)
dfsUtil(board, nx, ny, s);
}
}
}
💬 コメント
これはDFSを単純に利用した完全探索問題のようである.D 4級にとっては簡単な問題のようです.
Reference
この問題について([SWEA]2819:メッシュボードに接続されている数字), 我々は、より多くの情報をここで見つけました https://velog.io/@zayson/SWEA-2819번-격자판의-숫자-이어붙히기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol