白準-2784号(縦横パズル)
質問元:https://www.acmicpc.net/problem/2784
質問する
下のようなクロスワードパズルを解いてみます.
横線 device used to cool a PC solid water to obtain
縦線 small, soft, sweet fruit strong playing card fisherman's tool
6つの単語がある場合は、縦横パズルのプログラムを作成します.3つの語は横に並べ,3つは縦に並べなければならない.
は有効な方法があるかどうかを考えて、このように自然に解決しました. 6単語のうち3単語を選ぶだけなので、長くはかかりません.
質問する
下のようなクロスワードパズルを解いてみます.
横線
縦線
6つの単語がある場合は、縦横パズルのプログラムを作成します.3つの語は横に並べ,3つは縦に並べなければならない.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static boolean[] visited; // 방문 기록
private static List<String> word; // 문자열 저장
private static List<List<String>> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
word = new ArrayList<>(6);
visited = new boolean[6];
for (int i = 0; i < 6; i++) {
word.add(reader.readLine());
}
permutation(new int[3], 0, 3);
if (list.isEmpty()) sb.append(0);
else {
for (int i = 0; i < 3; i++) {
sb.append(list.get(0).get(i)).append("\n");
}
}
System.out.println(sb);
}
private static void permutation(int[] ans, int cnt, int R) {
if (cnt == R) {
// 3개 다 뽑은 경우
List<String> temp = new ArrayList<>(3);
List<String> copy = new ArrayList<>(6);
copy.addAll(word);
// 뽑은 3개 단어 넣기
for (int i = 0; i < 3; i++) {
temp.add(word.get(ans[i]));
copy.remove(word.get(ans[i]));
}
// 퍼즐이 성립하는지 비교
for (int i = 0; i < 3; i++) {
String tempStr = "" +
temp.get(0).charAt(i) +
temp.get(1).charAt(i) +
temp.get(2).charAt(i);
if (copy.contains(tempStr)) copy.remove(tempStr);
else return;
}
list.add(temp);
return;
}
for (int i = 0; i < 6; i++) {
if (!visited[i]) {
visited[i] = true;
ans[cnt] = i;
permutation(ans, cnt + 1, R);
visited[i] = false;
}
}
}
}
Reference
この問題について(白準-2784号(縦横パズル)), 我々は、より多くの情報をここで見つけました https://velog.io/@ghc1124/백준-2784번가로-세로-퍼즐テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol