새소식

반응형
Algotithms

[백준] 4659 비밀번호 발음하기

  • -
728x90
반응형

문제

  • 다음과 같은 규칙을 만족하는 비밀번호는 높음 품질을 가진다고 평가한다.
    1) 모음 하나를 반드시 포함한다.
    2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
    3) 같은 글자가 연속적으로 오면 안되나, ee와 oo는 허용한다.
  • 20글자 이하의 문자열이 주어질 때 품질 평가하기

 

풀이

  • 1) 모음 하나를 반드시 포함
    모음 집합과의 합집합 연산으로 현재 단어에 모음이 있는지 확인한다.
  • 2) 단어의 연속 확인
    이전 단어의 타입(모음/자음), 알파벳, 타입의 연속 개수를 포함하는 prev 변수를 통해 확인하도록 한다.

 

# 출력 함수
def result(res, word) :
    if res :
        print(f"<{word}> is acceptable.")
    else :
        print(f"<{word}> is not acceptable.")

# 모음 집합
consonants = set({'a', 'e', 'i', 'o', 'u'})

while True :
    word = input()
    if word == "end" :  # 마지막 단어
        break

    # 1) 모음 하나를 반드시 포함한다.
    if not set(word) & consonants :
        result(False, word)
        continue

    # 품질 확인
    res = True
    prev = {"type": '-', "alpha": '-', "cnt": 0}
    for w in word :
        t = "con" if w in consonants else "vow"
        # 2) 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
        if prev["type"] == t :
            prev["cnt"] += 1
            if prev["cnt"] == 3 :
                res = False
                break
        else :
            prev["type"] = t
            prev["cnt"] = 1

        # 3) 같은 글자가 연속적으로 오면 안되나, ee와 oo는 허용한다.
        if prev["alpha"] == w and (w not in {'e', 'o'}) :
            res = False
            break
            
        prev["alpha"] = w
        
    result(res, word)

 

References

  • 백준 오늘의 문제
반응형

'Algotithms' 카테고리의 다른 글

[백준] 20365 블로그2  (1) 2023.10.23
[백준] 11066 파일 합치기  (0) 2023.10.20
[백준] 1277 발전소  (1) 2023.10.19
[백준] 7569 토마토  (0) 2023.10.19
[백준] 2578 빙고  (0) 2023.10.18
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.