diff --git a/workbook_8708/4659-s5.py b/workbook_8708/4659-s5.py new file mode 100644 index 0000000..a85e97b --- /dev/null +++ b/workbook_8708/4659-s5.py @@ -0,0 +1,65 @@ +# 비밀번호 발음하기 + +import sys + +input = sys.stdin.readline + +alphabet = "abcdefghijklmnopqrstuvwxyz" + +VOWEL = "aeiou" +CONSONANT_OR_VOWEL = {a: 0 for a in alphabet} # 0이면 자음, 1이면 모음 +for v in VOWEL: + CONSONANT_OR_VOWEL[v] = 1 + +def check_word(word): + is_vowel_in = False + sequence_count = [-1, 0] # sequence_count[0]은 자음(0),모음(1) 구분, sequence_count[1]은 count + before_w = "" + for w in word: + if not is_vowel_in and CONSONANT_OR_VOWEL[w] == 1: # 1번째 조건 + is_vowel_in = True + + if sequence_count[0] == CONSONANT_OR_VOWEL[w]: # 2번째 조건 + sequence_count[1] += 1 + if sequence_count[1] >= 3: + return False + else: + sequence_count[0], sequence_count[1] = CONSONANT_OR_VOWEL[w], 1 + + if before_w not in ("e", "o") and before_w == w: # 3번째 조건 + return False + before_w = w + + if not is_vowel_in: # 1번째 조건 최종 확인 + return False + + return True + +def solution(): + while 1: + word = input().rstrip() + if word == "end": + break + + is_acceptable = check_word(word) + + if is_acceptable: + print(f"<{word}> is acceptable.") + else: + print(f"<{word}> is not acceptable.") + + return + + +solution() + +""" +걸린 시간: 25분 + +시간 복잡도: 들어오는 모든 단어의 길이만큼의 시간이 걸린다. + +해설: 자음과 모음 여부를 dictionary에 1, 0으로 O(1)에 구분할 수 있도록 세팅을 해둔다. +1번 조건은 한글자씩 볼 때 모음 여부에 따라 is_vowel_in 진위 여부를 결정한다. +2번 조건은 어떤 것이 몇 번 연속되고 있는지 현황을 기록하는 길이 2 리스트를 만들어서 판단한다. 기록과 다른 것이 나오면 초기화한다. +3번 조건은 이전 단어를 저장하는 변수를 만들고 이전 단어가 "e", "o"이면 통과하고, 아닐 경우 2번 연속되는지 확인한다. +""" \ No newline at end of file