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

주어지는 문자열에서 문자열을 순서대로 읽으면서 "welcome to code jam"이라는 문장을 몇 번 만들 수 있는지 구하는 문제이다.
시간 제한이 5초이고 문자열의 길이가 최대 30이어서 dfs로 가능한 모든 조합을 구한 뒤 "welcome to code jam"이 완성되는 경우 카운트를 증가시켰다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int count = 0;
static String target = "welcome to code jam";
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = par(br.readLine());
for (int i = 0; i < tc; i++) {
String s = br.readLine();
count = 0;
for (int j = 0; j < s.length(); j++) {
dfs(s,j,new StringBuilder());
}
System.out.println("Case #"+(i+1)+": " + lpad(count));
}
}
static String lpad(int t){
String s = String.valueOf(t);
if(s.length()>4){
s = s.substring(s.length()-4);
}else{
while(s.length()!=4){
s = "0".concat(s);
}
}
return s;
}
static void dfs(String s, int i, StringBuilder sb){
char c = s.charAt(i);
sb.append(c);
if(!target.startsWith(sb.toString())) return;
if(sb.toString().equals(target)){
count++;
return;
}
for (int j = i+1; j < s.length(); j++) {
dfs(s,j,new StringBuilder(sb));
}
}
static int par(String s) {
return Integer.parseInt(s);
}
}
'백준' 카테고리의 다른 글
| [JAVA] 백준 1800 - 인터넷 설치 (0) | 2025.10.03 |
|---|---|
| [JAVA] 백준 1445 - 일요일 아침의 데이트 (0) | 2025.10.03 |
| [JAVA] 백준 2567 - 색종이 - 2 (0) | 2025.10.02 |
| [JAVA] 백준 11909 - 배열 탈출 (0) | 2025.10.02 |
| [JAVA] 백준 10486 - Trapezoid Walkway (0) | 2025.10.02 |