[백준] 16500번 문자열 판별 (자바 풀이)
- 알고리즘 문제 해결(PS)/[백준]
- 2022. 5. 16.
문제
https://www.acmicpc.net/problem/16500
풀이
이 문제는 아래와 같이 DP를 사용하여 해결할 수 있다.
1. A에 있는 문자열을 HashSet 자료구조에 모두 저장한다.
2. S의 뒷자리부터 0까지 순서대로 문자열을 substring으로 잘라 A에 속해있는지 확인한다.
ex) t, st, est, test, ntest, ontest, contest .....
3. 만약 substring이 A에 속해있다면 해당 dp 배열의 원소를 1로 바꿔준다.
4. dp[0]을 출력한다.
코드
import java.util.*;
import java.io.*;
public class Baekjoon_16500 {
static int N;
static String S;
static int[] dp = new int[101];
static Set<String> set = new HashSet<>();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
S = br.readLine();
N = Integer.parseInt(br.readLine());
for(int i=0; i<N; i++) {
set.add(br.readLine());
}
for(int i = S.length()-1; i>=0; i--) {
for(int j = i+1; j < S.length(); j++) {
if(dp[j] == 1) {
if(set.contains(S.substring(i,j))) {
dp[i] = 1;
}
}
}
if(set.contains(S.substring(i))){
dp[i] = 1;
}
}
System.out.println(dp[0]);
}
}
반응형
'알고리즘 문제 해결(PS) > [백준]' 카테고리의 다른 글
[백준] 1941번 소문난 칠공주 (자바 풀이) (0) | 2022.05.09 |
---|---|
[백준] 1522번 문자열 교환 (자바 풀이) (0) | 2022.05.04 |
[백준] 20056번 마법사 상어와 파이어볼 (자바 풀이) (0) | 2022.05.02 |
[백준] 2210번 숫자판 점프 (자바 풀이) (0) | 2022.04.28 |
[백준] 2140번 지뢰찾기 (자바 풀이) (0) | 2022.04.05 |