😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[4659] 비밀번호 발음하기 / 파이썬 ( 정규표현식 )

또방91 2021. 12. 7. 12:13
728x90

 

 

문제 링크: https://www.acmicpc.net/problem/4659

 

4659번: 비밀번호 발음하기

좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp

www.acmicpc.net


디버깅 속의 실패들

* and 와 & 의 차이

* or 과 | 의 차이

이 두개 차이때문에 계속 디버깅이 안되고 있었다......

이건 공부를 해서 확실히 차이를 알아둬야지!


정답은 ??

1
2
3
4
5
6
7
8
9
10
11
12
13
import re
 
while True:
    test=input()
    if test=='end': break
    
    p= re.findall('a|e|i|o|u',test) #p만족하는게 있어야함
    q= re.findall('([a|e|i|o|u]{3})|([^a|e|i|o|u]{3})',test) #q만족하는게 없어야함
    r= re.findall(r'([a-df-np-z])\1',test) #r 만족하는 게 없어야함
    
    if len(p)!=0 and len(q)==0 and len(r)==0 :
        print(f"<{test}> is acceptable.")
    else:  print(f"<{test}> is not acceptable.")
cs

💯 풀이 과정

문제 속 조건을 정규표현식으로 써보기

  1. 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다. 'a|e|i|o|u'
  2. 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다. '([a|e|i|o|u]{3})|([^a|e|i|o|u]{3})'- 3번 연속 나오는 경우니까 {3}쓰고, 또한 자음의 경우는 [ ] 속 맨앞에 ^을 써 넣어 모음에 반대되는 경우를 써준다
  3. 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다. r'([a-df-np-z])\1'- 백슬래시를 한번만 쓰도록 r을 앞에 써주고,  - e랑o를 제외한 것들로 하고 싶으니 [a-df-n-p-z],- 그것이 한번 더 반복되는 거니까 ( ) 첫번째 그룹 묶어놓은 것을 한번더 써준다 \1

😎오늘의 한줄평: 조금 오래 걸렸지만, 막상 해결하고 나니, 너무 시원하다! 

 

 

 

 

728x90