[プログラマ](深度優先)単語を変換
ワード変換
条件
1.一度に1文字しか置換できない
2.ワードの単語にしか変換できない
3.各単語はアルファベット小文字のみで構成されています.
4.各単語の長さは3または10以下であり、すべての単語の長さは同じである.
5.単語は3個または50個以上の単語があり、重複する単語はない.
6.beginとtargetは違います.
7.変換できない場合は0を返します.
解答方法
1.与えられた単語を起点として、変換文字ごとにターゲットを探す.
2.単語の単語をdfsで1つずつ比較する.
3.最初の単語とwordslistの1つの単語に異なる文字がある場合はcount+1を用いて再開した単語として最初からwordslistと比較する.
5.このように比較した場合、targetのような単語が出た場合、count値を解答値に格納します.
6.dfsを比較し、count値が以前に保存した答え値(最小値でもよい)より小さい場合、答えの値をより小さいcountに置き換えて保存します.
7.変換できない場合は0と表示されるので、最初は答え値をInteger Max値として保存し、答え値が変わらない場合は0として出力します.
条件
1.一度に1文字しか置換できない
2.ワードの単語にしか変換できない
3.各単語はアルファベット小文字のみで構成されています.
4.各単語の長さは3または10以下であり、すべての単語の長さは同じである.
5.単語は3個または50個以上の単語があり、重複する単語はない.
6.beginとtargetは違います.
7.変換できない場合は0を返します.
解答方法
1.与えられた単語を起点として、変換文字ごとにターゲットを探す.
2.単語の単語をdfsで1つずつ比較する.
3.最初の単語とwordslistの1つの単語に異なる文字がある場合はcount+1を用いて再開した単語として最初からwordslistと比較する.
5.このように比較した場合、targetのような単語が出た場合、count値を解答値に格納します.
6.dfsを比較し、count値が以前に保存した答え値(最小値でもよい)より小さい場合、答えの値をより小さいcountに置き換えて保存します.
7.変換できない場合は0と表示されるので、最初は答え値をInteger Max値として保存し、答え値が変わらない場合は0として出力します.
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class test11 {
public static int answer = Integer.MAX_VALUE;
public static boolean check(String begin, String target) {
int c = 0;
for (int i = 0; i < begin.length(); i++) {
if (begin.charAt(i) != target.charAt(i)) {
c++;
}
}
Integer.MAX_VALUE
return c == 1 ? true : false;
}
public static void dfs(String[] sa, String begin, String target, int count, boolean used[]) {
if (begin.equals(target)) {
answer = (answer > count) ? count : answer;
return;
}
for (int i = 0; i < sa.length; i++) {
if (!used[i]) {
if (check(begin, sa[i]) == true) {
used[i] = true;
dfs(sa, sa[i], target, count + 1, used);
used[i] = false;
}
}
}
}
public static void main(String[] args) throws IOException {
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("src/test11.txt"))));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String begin = st.nextToken();
String target = st.nextToken();
st = new StringTokenizer(br.readLine());
int count = Integer.parseInt(st.nextToken());
String[] sa = new String[count];
for (int i = 0; i < count; i++) {
String word = br.readLine();
sa[i] = word;
}
boolean used[] = new boolean[count];
dfs(sa, begin, target, 0, used);
System.out.println(answer);
}
}
Reference
この問題について([プログラマ](深度優先)単語を変換), 我々は、より多くの情報をここで見つけました https://velog.io/@idnnbi/프로그래머스깊이우선テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol