π 133499 μΉμμ΄(2)
https://school.programmers.co.kr/learn/courses/30/lessons/133499
1. λ¬Έμ μμ½
- λ¬Έμμ΄μ΄ "aya", "ye", "woo", "ma" λ€ κ°μ§ λ°μμΌλ‘λ§ μ΄λ£¨μ΄μ Έ μκ³ , κ°μ λ°μμ μ°μν΄μ μ°λ©΄ μ λλ€
2. μ κ·Όλ°©λ²
- words λ°°μ΄ μ μΈνκ³ κ°λ₯ν λ°μ λ£μ΄λκΈ°
- κ° λ¬Έμμ΄ bμ λν΄ μ²μλΆν° μ°¨λ‘λλ‘ νμΈνκΈ°
- startsWith(w, i) μ¨μ νμ¬ μμΉμμ κ°λ₯ν λ°μμ΄ μμλλμ§ νμΈνκΈ°
- κ°μ λ°μμ΄ μ§μ μ μ¬μ©λ κ²(prev)μ κ°μΌλ©΄ 건λλ°κΈ°
- λκΉμ§ 쑰건μ λ§μ‘±νλ©΄ μ ν¨ν λ¨μ΄λ‘ μΉ΄μ΄νΈ
3. μ λ΅μ½λ
class Solution {
public int solution(String[] babbling) {
String[] words = {"aya", "ye", "woo", "ma"};
int count = 0;
for (String b : babbling) {
String prev = ""; // μ΄μ λ°μμ μ μ₯ν΄μ μ°μ νμΈ
boolean valid = true; // μ²μμλ μ ν¨νλ€κ³ κ°μ νκ³ μμ
int i = 0;
while (i < b.length()) {
boolean matched = false;
for (String w : words) {
// bλΌλ λ¬Έμμ΄μ΄ iλ²μ§Έ μΈλ±μ€λΆν° μμν΄μ wλΌλ λ¬Έμμ΄λ‘ μμνλμ§ νμΈνλ λ©μλ
if (b.startsWith(w, i) && !w.equals(prev)) {
prev = w;
i += w.length();
matched = true;
break;
}
}
// λ€ κ°μ§ λ°μ μ€ νλλ λ§€μΉ μ λλ©΄ μ ν¨νμ§ μμ
if (!matched) {
valid = false;
break;
}
}
// λκΉμ§ 쑰건μ λ§μ‘±νλ€λ©΄ count++
if (valid) count++;
}
return count;
}
}
4. μ κ·μμΌλ‘ νΈλ λ²
import java.util.regex.*;
class Solution {
public int solution(String[] babbling) {
String[] words = {"aya", "ye", "woo", "ma"};
int count = 0;
String pattern = "^(aya|ye|woo|ma)(?!\\1)(aya|ye|woo|ma)*(?!\\1)$";
Pattern regex = Pattern.compile(pattern);
for (String b : babbling) {
Matcher matcher = regex.matcher(b);
if (matcher.matches()) {
count++;
}
}
return count;
}
}
μ κ·μλ§μΌλ‘ νλ €κ³ νλ©΄ μλΉν 볡μ‘ν΄μ§λ€. μ κ·μμΌλ‘λ "νμ©λ¨μ΄λ§ ν¬ν¨"κΉμ§λ§ κ²μ¬νκ³ , μ°μλ λ¨μ΄λ₯Ό κΈμ§νλ 쑰건μ λ°λ‘ λ‘μ§μΌλ‘ μ²λ¦¬νλκ² κΉλνλ€.
import java.util.regex.*;
class Solution {
public int solution(String[] babbling) {
int count = 0;
// νμ©λ λ¨μ΄λ‘λ§ κ΅¬μ±λ κ²½μ°
String validPattern = "^(aya|ye|woo|ma)+$";
// κ°μ λ¨μ΄κ° μ°μλλ κ²½μ° κ±Έλ¬λ΄κΈ°
String invalidPattern = "(ayaaya|yeye|woowoo|mama)";
Pattern valid = Pattern.compile(validPattern);
Pattern invalid = Pattern.compile(invalidPattern);
for (String b : babbling) {
if (valid.matcher(b).matches() && !invalid.matcher(b).find()) {
count++;
}
}
return count;
}
}
1. "^(aya|ye|woo|ma)+$"
λ¬Έμμ΄ μ μ²΄κ° aya, ye, woo, ma μ€ νλ μ΄μμΌλ‘λ§ κ΅¬μ±λμ΄μΌ νλ€λ λ»μ΄λ€.
^(aya|ye|woo|ma)+$
1. ^
- λ¬Έμμ΄μ μμ
"abc"
λ¬Έμμ΄μμ^a
λΌκ³ νλ©΄ aλ‘ μμν΄μΌ νλ€λ λ»μ΄λ€.
2. (aya | ye | woo | ma)
- κ΄νΈ μμ μ¬λ¬ μ νμ§ μ€ νλ
aya
λλye
λλwoo
λλma
μ€ νλκ° λ§€μΉλλ€.
3. +
- λ°λ‘ μμ ν¨ν΄μ΄ ν λ² μ΄μ λ°λ³΅λ μ μλ€λ μλ―Έμ΄λ€.
- μλ₯Ό λ€μ΄,
aya
,yayaya
,wooma
, μ΄λ° μμΌλ‘ κ³μ μ΄μ΄μ Έλ λλ€. - λ¨, λΉ λ¬Έμμ΄μ μ λ¨ (κ·Έλ΄ κ²½μ°λ
*
μ¨μΌ ν¨)
4. $
- λ¬Έμμ΄μ λμ μλ―Ένλ€.
"^...$"
ν¨ν΄μ λ¬Έμμ΄ μ μ²΄κ° μ νν κ·μΉμ λ§μμΌ λ§€μΉλ¨μ λ»νλ€.
2. μ κ·μ κ°μ²΄ μμ±
Pattern regex = Pattern.compile(validPattern);
μ΄κ±΄ μ κ·μ λ¬Έμμ΄μ μ¬μ¬μ© κ°λ₯ν Pattern κ°μ²΄λ‘ λ§λλ κ³Όμ μ΄λ€.
- Pattern
- java.util.regex.Pattern ν΄λμ€
- μ κ·μμ κ°μ²΄νν΄μ μ¬λ¬ λ² μ¬μ©ν μ μκ² λ§λ€μ΄μ€λ€
- λ¬Έμμ΄μμ λ°λ³΅μ μΌλ‘ μ κ·μ λ§€μΉμ νκ³ μΆμ λ νΈλ¦¬νλ€.
- compile(String regex)
- μ κ·μ λ¬Έμμ΄μ Pattern κ°μ²΄λ‘ λ³ννλ€.
- μλ₯Ό λ€μ΄, μλμ²λΌ νλ©΄ pattern μμ μ κ·μμ΄ λ€μ΄ μκ³ , λ¬Έμμ΄ κ²μ¬ν μ€λΉκ° λ κ²μ΄λ€.
String validPattern = "^(aya|ye|woo|ma)+$";
Pattern pattern = Pattern.compile(validPattern);
3. Matcher μ ν¨κ» μ¬μ©νλ€.
for (String b : babbling) {
// λ§μ½ bκ° νμ©λ λ¨μ΄λ‘λ§ μ΄λ£¨μ΄μ Έ μκ³ , μ°μλ λ¨μ΄κ° μμΌλ©΄, μΉ΄μ΄νΈλ₯Ό 1 μ¬λ¦°λ€.
if (valid.matcher(b).matches() && !invalid.matcher(b).find()) {
count++;
}
}
- μ 체 λ¬Έμμ΄μ΄ valid ν¨ν΄κ³Ό μΌμΉνκ³ , μ°μ λ°λ³΅ κΈμ§ λ¨μ΄λ μμΌλ©΄ β count μ¦κ°
matches()
β μ 체 λ¬Έμμ΄ μ²΄ν¬find()
β λΆλΆ λ¬Έμμ΄ μ²΄ν¬!invalid.matcher(b).find()
β λ°λ³΅ λ¨μ΄κ° μμμ νμΈνλ λΆλΆμ΄λ€.
1. valid.matcher(b).matches()
- b λ¬Έμμ΄μ΄ νμ©λ λ¨μ΄("aya", "ye", "woo", "ma")λ§μΌλ‘ μ΄λ£¨μ΄μ Έ μλμ§ νμΈ
- λ¬Έμμ΄ μ μ²΄κ° ν¨ν΄κ³Ό μμ ν μΌμΉνλ©΄ true
- νκΈλ‘ μ½μΌλ©΄ "λ§μ½ bκ° aya, ye, woo, ma λ¨μ΄λ€λ‘λ§ μ΄λ£¨μ΄μ Έ μλ€λ©΄"
2. invalid.matcher(b).find()
- b μμ "ayaaya", "yeye", "woowoo", "mama" μ κ°μ λ¨μ΄ λ°λ³΅μ΄ μλμ§ νμΈ
- find()λ λΆλΆ λ¬Έμμ΄ κ²μ¬
- !λ₯Ό λΆμ΄λ©΄ λ°λ³΅ λ¨μ΄κ° μμΌλ©΄ true
- νκΈλ‘ μ½μ΄λ³΄λ©΄ "bμμ κ°μ λ¨μ΄κ° μ°μμΌλ‘ λμ€μ§ μλλ€λ©΄"
3. &&μ΄λ―λ‘ μ 1,2 λ 쑰건 λͺ¨λ λ§μ‘±νλ©΄ ifλ¬Έμ΄ μ€νλλ€.