4659_비밀번호 발음하기 (Python)

0. 출처

1. 기록

  • 22/03/29 (화)

2. 풀이

(1) 아이디어, 시간복잡도, 자료구조

1. 아이디어
>> 문제에서 제시된 내용으로 구현한다.
>> 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다. -> 반드시 하나 이상 포함되어야 한다를 어떻게 코드로 작성할지?
>> 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다. -> ex. aei, bcd 등은 허용x
>> 같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다. -> aa, bb, cc 등은 허용x

2. 시간복잡도
>>

3. 자료구조
>>

(2) 예제 입력, 예제 출력

- 예제 입력 1 -
a
tv
ptoui
bontres
zoggax
wiinq
eep
houctuh
end

- 예제 출력 1 -
<a> is acceptable.
<tv> is not acceptable.
<ptoui> is not acceptable.
<bontres> is not acceptable.
<zoggax> is not acceptable.
<wiinq> is not acceptable.
<eep> is acceptable.
<houctuh> is acceptable.

(3) 코드

vowels = "aeiou"
while True:
    s = input()
    if s == "end":
        break
    v = 0
    k = 1
    for i in range(len(s)):
        if s[i] in vowels:
            v = 1
        if i > 0:
            if s[i] == s[i-1] and s[i] != 'e' and s[i] != 'o':
                k = 0
                break
        if i > 1:
            if s[i] not in vowels:
                if s[i-1] not in vowels:
                    if s[i-2] not in vowels:
                        k = 0
                        break
            if s[i] in vowels:
                if s[i-1] in vowels:
                    if s[i-2] in vowels:
                        k = 0
                        break
    if v == 1 and k == 1:
        print(f"<{s}> is acceptable.")
    else:
        print(f"<{s}> is not acceptable.")

(4) 정리

문자열 유형 문제의 구현이 난이도가 올라갈수록 복잡해지는 것 같습니다.
a,e,i,o,u 하나하나를 배열에 담아서 확인해야하나 생각했는데 'aeiou'를 문자열로 확인하는 방법이 있음을 배웠습니다.

(5) 참고

참고 풀이

+ Recent posts