문제 : boj14405
1. 직접 찾아보자!
우선 정규식을 사용하지 않고 직접 찾는걸 확인해보자. 간단히 생각해서, 문자열에서 "pi", "ka", "chu"를 모두 나올 수 없는 문자로 변경해보자! 예를들어 "piakapichu"를 확인해보자.
이제 변경되지 못하고 남는 'a'가 보인다. 따라서 'NO'를 출력하면 된다. '&'만 있었다면 'YES'를 출력하면 된다.
그냥 삭제하지 않고 저렇게 자리를 남겨두는 이유는 'cpihu' 와 같은 경우 때문이다. 이 때 위 처럼 문자를 남긴다면 'c&hu'가 되어 chu를 변경할 수 없지만, 그냥 삭제하면 'chu'가 되므로 변경될 수 있다. 즉 올바른 답을 찾을 수 없다.
위와 같은 방식으로 짠 코드는 '코드1'에서 볼 수 있다.
2. 정규식을 사용해 찾아보자!
정규식으로 써본다면 더 간단하다. "(pi|ka|chu)*" 정도면 된다! 'pi' 또는 'ka' 또는 'chu'가 0번 이상 반복됨을 의미한다. 정규식을 사용해 짠 코드는 자바는 '코드2', 파이썬은 '코드3' 에서 볼 수 있다.
코드1 (자바 - 직접 찾는 버전)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] data = new String[] {
"pi"
,"ka"
,"chu"
};
StringBuffer str = new StringBuffer(br.readLine());
int availableCheck = str.length();
for (int i = 0; i < data.length; i++) {
while (true) {
int idx = str.indexOf(data[i]);
if ( idx == -1 )
break;
str.replace(idx, idx + data[i].length(), ",");
availableCheck -= data[i].length();
}
}
if (availableCheck == 0)
bw.write("YES\n");
else
bw.write("NO\n");
bw.flush();
br.close();
bw.close();
}
}
코드2 (자바 - 정규식 사용 버전)
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String regex = "^(pi|ka|chu)*$";
System.out.println(str.matches(regex)?"YES":"NO");
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
코드3 (파이썬 - 정규식 사용 버전)
import re
regex = re.compile('(pi|ka|chu)*')
str = input()
if re.fullmatch(regex, str) :
print("YES")
else:
print("NO")
'PS > BOJ' 카테고리의 다른 글
백준 24927 자바 - Is It Even? (boj 24927 java) (0) | 2022.03.30 |
---|---|
백준 2713 자바 - 규현이의 사랑을 담은 문자메시지 (boj 2713 java) (0) | 2022.03.29 |
백준 5698 자바 - Tautogram (boj 5698 java) (2) | 2022.03.28 |
백준 9342 자바 - 염색체 (boj 9342 java) (0) | 2022.03.28 |
백준 14381 자바 - 숫자세는 양 (Small) (boj 14381 java) (0) | 2022.03.27 |
댓글