https://www.acmicpc.net/problem/14405
코드
s = input()
tmp = ""
ans = "YES"
for i in range(len(s)):
tmp += s[i]
if tmp in ["pi", "ka", "chu"]:
tmp = ""
if len(tmp) >= 3:
ans = "NO"
break
print(ans if tmp == "" else "NO")
정말 단순한 방법을 사용해서 풀 수 있는 문제긴 하지만, 다 풀고 다른 사람들 코드를 보다가 정규표현식을 이용하여 풀 수 있다는 것을 알았다.
import re
s = input()
pattern = re.compile(r'^(pi|ka|chu)*$')
if pattern.match(s):
print("YES")
else:
print("NO")
정규표현식을 간단하게 설명해보자면 우선 `^`은 문자열의 맨 처음과 일치하는 메타 문자이고, `*`은 `*` 바로 앞에 있는 문자가 무한대까지 반복될 수 있다는 의미이다. 그렇기 때문에 위 코드의 정규표현식은 "pi" 또는 "ka" 또는 "chu"가 처음부터 무한 반복되는 패턴을 의미하는 것이다.
match는 인자로 받은 문자열이 컴파일된 패턴과 매치되는지 확인하는 메서드이다. 만약 매치된다면 match 객체를 리턴하고, 안 된다면 None을 리턴한다.
그렇기 때문에 "pi", "ka", "chu"로만 이루어진 문자열은 위 코드의 패턴에 매치되기 때문에 match 객체를 리턴하여 조건문이 True가 되고, 아닌 경우에는 None을 리턴하여 조건문이 False가 된다.
근데 정규표현식 사용하는게 시간은 더 걸린다....왜인지는 알아봐야 할 듯
'문제풀이 > 문자열' 카테고리의 다른 글
[Javascript/자바스크립트] 백준 1942번 디지털시계 (0) | 2024.07.09 |
---|---|
[Javascript/자바스크립트] 구름 - 단어의 개수 세기 (0) | 2024.07.01 |
[Python/파이썬] 백준 5052번 전화번호 목록 (0) | 2024.03.25 |
[Python/파이썬] 백준 3613번 Java vs C++ (0) | 2024.03.16 |
[Python/파이썬] 백준 19948번 음유시인 영재 (0) | 2024.03.14 |