[Java] ๋ฐฑ์ค 16500๋ฒ - ๋ฌธ์์ด ํ๋ณ
[๋ฌธ์ ]
https://www.acmicpc.net/problem/16500
[ํ์ด]
์๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
https://code-lab1.tistory.com/222
DP๋ก ํ์ดํด์ผ ํ๋ค๋๊ฑธ ์๊ฐํด๋ด์ง ๋ชปํ๊ณ ๊ฒฐ๊ตญ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.ใ ใ
DP๋ก ๋ง์ง๋ง index๋ถํฐ ๋ฌธ์์ด์ ์๋ผ substring์ ์์ฑํ๊ณ , ํด๋น substring์ด A์ ์งํฉ set์ ํฌํจ๋์ด์๋ค๋ฉด
dp[index] = 1๋ก ๊ฐฑ์ ํฉ๋๋ค. ๋ํ index + 1์ ์์น๋ถํฐ dp ๋๊น์ง ํ์ํ๋ฉฐ 1์ด ์๋ค๋ฉด substring(index, 1์ด ์๋ index)๊ฐ set์ ์กด์ฌํ๋ค๋ฉด dp[index] = 1๋ก ๊ฐฑ์ ํด์ค๋๋ค.
์๋ฅผ ๋ค์ด, s = "abcefg", set = { abc, efg, abce }์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค๋ฉด ํ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- f -> g๊ฐ 1์ธ์ง ํ์ธ X
- e -> fg ์ค์ 1์ด ์๋์ง ํ์ธ -> X (efg ๊ฐ set์ ํฌํจ๋์ด ์์ผ๋ฏ๋ก e์ index์ธ 3์ 1์ ์ ์ฅ : dp[3])
- c -> efg ์ค e์ 1์ด ์์ผ๋ฏ๋ก, c์ index์ธ 2๋ถํฐ e์ index์ธ 3๊น์ง์ substring์ธ c๊ฐ set์ ์กด์ฌํ๋์ง ํ์ธ -> X
์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณต ํ๋ฉฐ a์ ๋๋ฌํ์๋, bcefg์ค์ 1์ด ์๋ e๋ฅผ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ํ์ธํด๋ณธ๋ค๋ฉด substring(0,3)์ abc์ด๊ณ , abc๋ set์ ์กด์ฌํฉ๋๋ค ๋ฐ๋ผ์ dp[0] = 1์ด ๋๊ณ ๋ฐ๋ณต๋ฌธ์ด ์ข ๋ฃ๋ฉ๋๋ค.
dp[0] = 1 ์ด๋ผ๋๊ฒ์ ๋ฌธ์์ด์ ๋ง๋ค ์ ์๋ค๋๊ฒ์ ์๋ฏธํ๋ฏ๋ก 1์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋ฉ๋๋ค.
[์ฝ๋]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int N = Integer.parseInt(br.readLine());
// A ๋ฌธ์์ด์ ์
๋ ฅ ๋ฐ์
Set<String> set = new HashSet<>();
for(int i=0;i<N;i++) {
String word = br.readLine();
if(s.contains(word)) {
set.add(word);
}
}
int[] dp = new int[s.length()];
// ๋ง์ง๋ง index๋ถํฐ ํ์
for(int i=s.length() -1 ;i>=0;i--) {
for(int j=i+1;j<s.length();j++) {
if(dp[j] == 1 && set.contains(s.substring(i,j))) {
dp[i] = 1;
}
}
if(set.contains(s.substring(i))) {
dp[i] = 1;
}
}
System.out.println(dp[0]);
}
}