반응형
https://www.acmicpc.net/problem/16500
◎문제 풀이
문자열 s가 주어질 때, 주어진 여러 개의 문자열 조합으로 s를 만들 수 있는지를 묻는 문제이다. 조합을 만드는 문제는 재귀호출로 풀면된다. 적절한 가지치기 조건을 두어 DFS 탐색을 하면 문제를 풀 수 있다.
◎코드
import java.util.Scanner;
//BOJ165000 문자열 판별 ( 백트래킹 )
public class Main {
public static String[] words;
public static boolean[] visited;
public static boolean flag;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = sc.nextInt();
words = new String[n];
visited = new boolean[n];
for(int i=0;i<n;i++){
words[i] = sc.next();
}
dfs("",str);
if(flag) System.out.println(1);
else System.out.println(0);
}
public static void dfs(String ans, String target){
if(ans.equals(target)) {
flag = true;
return;
}
for(int i=0;i<words.length;i++){
if(visited[i]) continue;
String tmp = ans;
String value = tmp+words[i];
if(target.length() < value.length() ) continue; // 가지치기 조건1
if(target.substring(0,value.length()).equals(value)){ // 가지치기 조건2
visited[i] = true;
dfs(value, target);
visited[i] = false;
}
}
}
}
반응형
'문제풀이 > String' 카테고리의 다른 글
[PS] BOJ17609 회문 ( string ) with JAVA (0) | 2023.09.01 |
---|---|
[PS] BOJ2608 로마숫자 ( string ) with JAVA (0) | 2023.08.28 |
[CodingTest] BOJ17413 단어뒤집기2 ( 문자열 ) with Python (0) | 2023.06.09 |
[JAVA] 백준 1436번 영화감독 숌 : 문자열 찾기 (0) | 2021.07.31 |
[JAVA] 백준 5622번 크로아티아 알파벳 : 문자열 탐색 (0) | 2021.07.13 |