백준 #4659 비밀번호 발음하기

2022. 1. 17. 03:30백준 문제풀이

반응형

 

백준 4659 비밀번호 발음하기 문제이다.

 

알고리즘 분류는 구현과 문자열.

('그냥 닥치고 풀어라'라는 뜻)

 

위의 문제를 읽어보면 3가지 조건이 주어져있다.

 

모음은 하나를 반드시 포함해라,

모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다,

같은 글자가 연속적으로 두 번 오면 안 되나, ee와 oo는 허용한다. 

 

언뜻 보면은 이거 일일이 해야하나 싶지만,

실제로 그렇다. (말이 다르잖아!!)

하지만 겁먹을 필요는 없다.

구현은 뭐다? 주먹구구식.

 

 

while 1:
    word = input()
    if word == "end":
        break
    flag = True
    temp = word
    for x in "aeiou":
        temp = temp.replace(x, "a")
    for x in "qwrtypsdfghjklzxvbnm":
        temp = temp.replace(x, "b")
    if sum(map(lambda x:word.count(x), "aeiou")) == 0:
        flag = False
    if temp.count("aaa") + temp.count("bbb") > 0:
        flag = False
    if sum(map(lambda x:word.count(x + x), "qwrtyuipasdfghjklzxcvbnm")) > 0:
        flag = False
    print(("<%s> is acceptable." if flag else "<%s> is not acceptable.") % word)

 

'end' 라는 문자열이 나오기 전까지 돌아아야 하니까 첫 번째에 탈출문을 만들어 준다.

그런 후 입력받은 문자열을 임시 변수로 옮겨주는데, 그 이유는 문자열을 가공해야하기 때문이다.

그리고 모음이 있다면, 전부 a로 바꿔준다.

그리고 자음이 있다면, 전부 b로 바꿔준다.

 

왜 바꿔주냐고? 밑에 보면 알 수 있다.

 

그리고, lambda식을 사용해서, 모음의 여부를 확인해준다.

모음이 없다면 not acceptable문을 출력한다.

 

%% 람다식을 모르는 분들을 위해서 간단하게 설명하자면,

콜론을 기준으로 앞에 오는 것은 매개변수이고, 뒤에 오는 것은 리턴 값이다.

자바나, JS의 익명함수와 생긴건 조금 다르지만, 맥락은 같다. %%

 

그 다음으로 자음 혹은 모음이 3개 연달아 오는지 확인해야하는데,

이 때를 위해서 우리는 앞에서 모음을 모두 a, 자음을 모두 b로 바꾸는 작업을 해주었다.(꼼수)

그리고 여기에 해당이 된다면 not acceptable을 출력한다.

 

마지막으로 ee와 oo를 제외한 녀석들이 붙어 있는지 확인해주면 완성.

 

간단하지만 머리아픈 문제였다.

 

 

 

 

 

반응형

'백준 문제풀이' 카테고리의 다른 글

백준 #10709 기상캐스터  (0) 2022.01.20
백준 #2807 수학숙제  (0) 2022.01.18
백준 #1992 쿼드트리  (0) 2022.01.15
#1697 백준 숨바꼭질 코드 C++  (0) 2021.07.20
#7662 백준 이중 우선순위 큐 C++  (0) 2021.07.20