16500λ²: λ¬Έμμ΄ νλ³
첫째 μ€μ κΈΈμ΄κ° 100μ΄νμΈ λ¬Έμμ΄ Sκ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ Aμ ν¬ν¨λ λ¬Έμμ΄μ κ°μ N(1 β€ N β€ 100)μ΄ μ£Όμ΄μ§λ€. μ μ§Έ μ€λΆν° Nκ°μ μ€μλ Aμ ν¬ν¨λ λ¨μ΄κ° ν μ€μ νλμ© μ£Όμ΄μ§λ€. Aμ
www.acmicpc.net
λ¬Έμ νμ΄
μ²μμ λ¨μ΄λͺ©λ‘(A)μ μλ λ¨μ΄λ€μ κΈ΄ λ¨μ΄λΆν° νλμ© λ¬Έμμ΄μ μλΆλΆκ³Ό λΉκ΅ν΄μ μΌμΉνλ©΄ λ¨μ΄ κΈΈμ΄λ§νΌ μμ νκ³ λ€μ νμνλ λ°©μμΌλ‘ μ κ·Όνμλλ°, λ¨μ΄λͺ©λ‘μ software
, soft
κ°μ΄ λ¨μ΄ μ¬μ΄μ μλΈ μ€νΈλ§μ΄ μ‘΄μ¬νλ κ²½μ° λ°λ‘κ° μκΈ°λ κ² κ°λ€..(μ¬μ€ μ νν λ¬Έμ μ λ°κ²¬ λͺ»ν¨) λ¨μ΄λ₯Ό μ°Ύμλ€κ³ λ¬Έμμ΄μμ μμ ν ν λ€μ κ³ λ €νμ§ μλ λ°©μμ λ―Έμ² κ³ λ €νμ§ λͺ»νλ κ²½μ°κ° λ°μνλ κ² κ°λ€. λ°λΌμ DP ν
μ΄λΈμ μ΄μ©ν΄ λ¬Έμμ΄ λ΄μμ λ¨μ΄λͺ©λ‘μ μλ κ²½μ°λ₯Ό 체ν¬ν΄ μ£Όλ λ°©μμΌλ‘ λ€μ μ κ·Όνλ€.
DP ν
μ΄λΈμλ λ¬Έμμ΄ Sμμ νΉμ μΈλ±μ€ i
λΆν° μμνλ μλΈ λ¬Έμμ΄μ΄ λ¨μ΄λͺ©λ‘μ μ‘΄μ¬νλ μ§μ λν μ 보λ₯Ό λ΄κ³ μλ€. λ¨μ΄λͺ©λ‘μ μμΌλ©΄ 1
μμΌλ©΄ 0
μ μ μ₯νλ€. μ¬κΈ°μ μλΈ λ¬Έμμ΄μ μμ μμΉμΈ i
λ λ¬Έμμ΄ Sμ λμμ λΆν° μμΌλ‘ ν μΉΈμ© μμ°¨μ μΌλ‘ μ΄λνλ©° νμνλ€. "κ·ΈλΌ μμνλ μμΉλ μ ν΄μ‘λλ° κ° μλΈ λ¬Έμμ΄μ λ μΈλ±μ€λ??". λ¬Έμ μμ 곡백μμ΄ λͺ©λ‘ μ λ¨μ΄λ€λ‘λ§ μ°κ²°λμ΄ μλμ§ νλ¨νλΌκ³ νλ€. λ°λΌμ κ° μλΈ λ¬Έμμ΄μ λμΈλ±μ€λ λ€μ μλ νΉμ λ¨μ΄μ λ°λ‘ μ
λλ λ¬Έμμ΄μ 맨 λ
μ΄ λ κ²μ΄λ€.

μμ κ·Έλ¦Όμμ 보면 dp ν
μ΄λΈμ νΈμμ λ¬Έμμ΄μ λμ μ½κ² νλ¨νκΈ° μν΄ Sμ κΈΈμ΄ + 1
λ‘ μ§μ νκ³ λ§μ§λ§ μΈλ±μ€μλ 1
μ ν λΉν΄μ€¬λ€. μ΄μ S.length - 1λΆν°
ν μΉΈμ© μμΌλ‘ μ€λ©° μλΈ λ¬Έμμ΄μ κ΅¬ν΄ λ¨μ΄λͺ©λ‘μ μλμ§ νμΈνμ. μ¦, "t"
, "st"
, "est"
, "test"
, "ntest"
, ... μ΄λ κ² μλΈ λ¬Έμμ΄μ νμΈνλ μμ
μ ν κ²μ΄λ€. i
κ° 8μΌλ, μλΈ λ¬Έμμ΄μ μμμ cκ° λκ³
λ§μ§λ§ λ¬Έμλ 14λ²μ t
κ° λλ€. μ΄λ κ² κ΅¬ν "contest"
λ λͺ©λ‘μ μμΌλ―λ‘ dp[8]
μ 1
λ‘ μ±μμ€λ€. i
κ° 6μΌ λλ r
λΆν° λ€μ μλ λ€λ₯Έ λ¨μ΄ (contest) λ°λ‘ μμΈ e
κΉμ§ "re"
μ 맨 λκΉμ§μΈ "recontest"
λ₯Ό λͺ©λ‘μμ νμΈνλ©΄ λλ€. (μμΌλ dp[6] = 0
)
- λ¬Έμμ΄μ μλΈ λ¬Έμμ΄μ κ΅¬ν΄ λͺ©λ‘μ μλμ§ νμΈ
- μλΈ λ¬Έμμ΄μ μμμ
i
(λ¬Έμμ΄ Sμ λμμλΆν°) - μλΈ λ¬Έμμ΄μ λ§μ§λ§μ
j
(λ€μ μλ λ€λ₯Έ λ¨μ΄ μ or λ¬Έμμ΄ λ) - μλΈ λ¬Έμμ΄μ΄ λͺ©λ‘μ μλ€λ©΄ DP ν μ΄λΈμ 1λ‘ νμ

μμ€μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
// νΉμ μΈλ±μ€μμ μμνλ λ¨μ΄κ° "λ¨μ΄μ§ν©"μ μλμ§ μλμ§ νλ³
// 0:μμ / 1:μμ
int[] dp = new int[str.length()+1];
dp[str.length()] = 1;
// λ¨μ΄λ€ μ§ν©
HashSet<String> set = new HashSet<>();
int N = Integer.parseInt(br.readLine());
for(int i = 0 ; i < N ; i++){
set.add(br.readLine());
}
// λ¬Έμμ΄μ λ§μ§λ§ λ¬ΈμλΆν° 체ν¬
for(int i = str.length() - 1 ; i>= 0 ; i--){ // λ¨μ΄μ μμ μΈλ±μ€
for(int j = i+1 ; j <= str.length() ; j++){ // λ¨μ΄μ λ μΈλ±μ€ μ°ΎκΈ°
if(dp[j] == 1){ // 1λ‘ νμλμ΄μμΌλ©΄ λμΌλ‘ νλ¨
// iλΆν° jκΉμ§ λμ λ¨μ΄κ° μ§ν©μ μλμ§ νλ³
if(set.contains(str.substring(i, j))){
dp[i] = 1;
}
}
}
}
System.out.println(dp[0]);
}
}
'π μ½ν μ°μ΅μ₯ > π DP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Baekjoon] λ°±μ€ 2193_μ΄μΉμ (Java) (0) | 2023.07.09 |
---|---|
[Baekjoon] λ°±μ€ 9095_1,2,3 λνκΈ° (Java) (0) | 2023.07.08 |
16500λ²: λ¬Έμμ΄ νλ³
첫째 μ€μ κΈΈμ΄κ° 100μ΄νμΈ λ¬Έμμ΄ Sκ° μ£Όμ΄μ§λ€. λμ§Έ μ€μλ Aμ ν¬ν¨λ λ¬Έμμ΄μ κ°μ N(1 β€ N β€ 100)μ΄ μ£Όμ΄μ§λ€. μ μ§Έ μ€λΆν° Nκ°μ μ€μλ Aμ ν¬ν¨λ λ¨μ΄κ° ν μ€μ νλμ© μ£Όμ΄μ§λ€. Aμ
www.acmicpc.net
λ¬Έμ νμ΄
μ²μμ λ¨μ΄λͺ©λ‘(A)μ μλ λ¨μ΄λ€μ κΈ΄ λ¨μ΄λΆν° νλμ© λ¬Έμμ΄μ μλΆλΆκ³Ό λΉκ΅ν΄μ μΌμΉνλ©΄ λ¨μ΄ κΈΈμ΄λ§νΌ μμ νκ³ λ€μ νμνλ λ°©μμΌλ‘ μ κ·Όνμλλ°, λ¨μ΄λͺ©λ‘μ software
, soft
κ°μ΄ λ¨μ΄ μ¬μ΄μ μλΈ μ€νΈλ§μ΄ μ‘΄μ¬νλ κ²½μ° λ°λ‘κ° μκΈ°λ κ² κ°λ€..(μ¬μ€ μ νν λ¬Έμ μ λ°κ²¬ λͺ»ν¨) λ¨μ΄λ₯Ό μ°Ύμλ€κ³ λ¬Έμμ΄μμ μμ ν ν λ€μ κ³ λ €νμ§ μλ λ°©μμ λ―Έμ² κ³ λ €νμ§ λͺ»νλ κ²½μ°κ° λ°μνλ κ² κ°λ€. λ°λΌμ DP ν
μ΄λΈμ μ΄μ©ν΄ λ¬Έμμ΄ λ΄μμ λ¨μ΄λͺ©λ‘μ μλ κ²½μ°λ₯Ό 체ν¬ν΄ μ£Όλ λ°©μμΌλ‘ λ€μ μ κ·Όνλ€.
DP ν
μ΄λΈμλ λ¬Έμμ΄ Sμμ νΉμ μΈλ±μ€ i
λΆν° μμνλ μλΈ λ¬Έμμ΄μ΄ λ¨μ΄λͺ©λ‘μ μ‘΄μ¬νλ μ§μ λν μ 보λ₯Ό λ΄κ³ μλ€. λ¨μ΄λͺ©λ‘μ μμΌλ©΄ 1
μμΌλ©΄ 0
μ μ μ₯νλ€. μ¬κΈ°μ μλΈ λ¬Έμμ΄μ μμ μμΉμΈ i
λ λ¬Έμμ΄ Sμ λμμ λΆν° μμΌλ‘ ν μΉΈμ© μμ°¨μ μΌλ‘ μ΄λνλ©° νμνλ€. "κ·ΈλΌ μμνλ μμΉλ μ ν΄μ‘λλ° κ° μλΈ λ¬Έμμ΄μ λ μΈλ±μ€λ??". λ¬Έμ μμ 곡백μμ΄ λͺ©λ‘ μ λ¨μ΄λ€λ‘λ§ μ°κ²°λμ΄ μλμ§ νλ¨νλΌκ³ νλ€. λ°λΌμ κ° μλΈ λ¬Έμμ΄μ λμΈλ±μ€λ λ€μ μλ νΉμ λ¨μ΄μ λ°λ‘ μ
λλ λ¬Έμμ΄μ 맨 λ
μ΄ λ κ²μ΄λ€.

μμ κ·Έλ¦Όμμ 보면 dp ν
μ΄λΈμ νΈμμ λ¬Έμμ΄μ λμ μ½κ² νλ¨νκΈ° μν΄ Sμ κΈΈμ΄ + 1
λ‘ μ§μ νκ³ λ§μ§λ§ μΈλ±μ€μλ 1
μ ν λΉν΄μ€¬λ€. μ΄μ S.length - 1λΆν°
ν μΉΈμ© μμΌλ‘ μ€λ©° μλΈ λ¬Έμμ΄μ κ΅¬ν΄ λ¨μ΄λͺ©λ‘μ μλμ§ νμΈνμ. μ¦, "t"
, "st"
, "est"
, "test"
, "ntest"
, ... μ΄λ κ² μλΈ λ¬Έμμ΄μ νμΈνλ μμ
μ ν κ²μ΄λ€. i
κ° 8μΌλ, μλΈ λ¬Έμμ΄μ μμμ cκ° λκ³
λ§μ§λ§ λ¬Έμλ 14λ²μ t
κ° λλ€. μ΄λ κ² κ΅¬ν "contest"
λ λͺ©λ‘μ μμΌλ―λ‘ dp[8]
μ 1
λ‘ μ±μμ€λ€. i
κ° 6μΌ λλ r
λΆν° λ€μ μλ λ€λ₯Έ λ¨μ΄ (contest) λ°λ‘ μμΈ e
κΉμ§ "re"
μ 맨 λκΉμ§μΈ "recontest"
λ₯Ό λͺ©λ‘μμ νμΈνλ©΄ λλ€. (μμΌλ dp[6] = 0
)
- λ¬Έμμ΄μ μλΈ λ¬Έμμ΄μ κ΅¬ν΄ λͺ©λ‘μ μλμ§ νμΈ
- μλΈ λ¬Έμμ΄μ μμμ
i
(λ¬Έμμ΄ Sμ λμμλΆν°) - μλΈ λ¬Έμμ΄μ λ§μ§λ§μ
j
(λ€μ μλ λ€λ₯Έ λ¨μ΄ μ or λ¬Έμμ΄ λ) - μλΈ λ¬Έμμ΄μ΄ λͺ©λ‘μ μλ€λ©΄ DP ν μ΄λΈμ 1λ‘ νμ

μμ€μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
// νΉμ μΈλ±μ€μμ μμνλ λ¨μ΄κ° "λ¨μ΄μ§ν©"μ μλμ§ μλμ§ νλ³
// 0:μμ / 1:μμ
int[] dp = new int[str.length()+1];
dp[str.length()] = 1;
// λ¨μ΄λ€ μ§ν©
HashSet<String> set = new HashSet<>();
int N = Integer.parseInt(br.readLine());
for(int i = 0 ; i < N ; i++){
set.add(br.readLine());
}
// λ¬Έμμ΄μ λ§μ§λ§ λ¬ΈμλΆν° 체ν¬
for(int i = str.length() - 1 ; i>= 0 ; i--){ // λ¨μ΄μ μμ μΈλ±μ€
for(int j = i+1 ; j <= str.length() ; j++){ // λ¨μ΄μ λ μΈλ±μ€ μ°ΎκΈ°
if(dp[j] == 1){ // 1λ‘ νμλμ΄μμΌλ©΄ λμΌλ‘ νλ¨
// iλΆν° jκΉμ§ λμ λ¨μ΄κ° μ§ν©μ μλμ§ νλ³
if(set.contains(str.substring(i, j))){
dp[i] = 1;
}
}
}
}
System.out.println(dp[0]);
}
}
'π μ½ν μ°μ΅μ₯ > π DP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Baekjoon] λ°±μ€ 2193_μ΄μΉμ (Java) (0) | 2023.07.09 |
---|---|
[Baekjoon] λ°±μ€ 9095_1,2,3 λνκΈ° (Java) (0) | 2023.07.08 |