[BOJ] 4659. 비밀번호 발음하기

Jimeaning·2023년 4월 11일
0

코딩테스트

목록 보기
73/143

Python3

문제

https://www.acmicpc.net/problem/4659

키워드

  • 구현
  • 문자열
  • 특정 상황까지 입력받기

문제 풀이

문제 요구사항

  • 모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다.
  • 모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
  • 같은 글자가 연속적으로 두 번 오면 안 되나, ee 와 oo는 허용한다.

변수 설명

s = 비밀번호를 저장하는 변수
pw = 비밀번호를 리스트로 저장하는 변수
v_flag = 모음이 있는지 판단하는 변수
v_cnt = 연속되는 모음이 몇 개인지 세는 변수
c_cnt = 연속되는 자음이 몇 개인지 세는 변수

=> v_cnt와 c_cnt는 '연속되는' 자/모음 개수를 알아보는 것이기 때문에 
만약 모음이 나왔다면 자음 개수 0으로 초기화, 자음이 나왔다면 모음 개수 초기화 해줘야 한다

err = 같은 글자가 연속적으로 두 번 오거나 자음/모음이 3개 연속으로 온 경우 1

최종 코드

import sys
vowel = {'a', 'e', 'i', 'o', 'u'}

while True:
    s = sys.stdin.readline().rstrip()
    if s == 'end':
        break
    
    pw = list(s)
    v_flag = 0
    v_cnt = 0
    c_cnt = 0
    err = 0
    
    for i in range(len(pw)):
        if i > 0:
        	# 같은 글자가 연속적으로 두 번 온 경우
            if pw[i] == pw[i-1]:
            	# ee, oo가 아닌 경우는 err에 1을 넣는다
                if pw[i] != 'e' and pw[i] != 'o':
                    err = 1
                    break
                    
        # 만약 모음이라면 v_flag는 1로 바꾸고 v_cnt 값을 1 증가시킨다.
        if pw[i] in vowel:
            v_flag = 1
            v_cnt += 1
            c_cnt = 0
            # 만약 모음 개수가 3개면 err는 1이다
            if v_cnt == 3:
                err = 1
                break
        # 자음인 경우 c_cnt를 1 증가시키고 v_cnt값을 0으로 바꾼다.
        else:
            c_cnt += 1
            v_cnt = 0
            # 만약 자음 개수가 3개라면 err에 1을 넣는다.
            if c_cnt == 3:
                err = 1
                break
     
    # 만약 err가 1이 아니고 모음이 있는 단어면 acceptable 출력
    if (err != 1) and (v_flag == 1):
        print('<', s, '> is acceptable.', sep='')
    else:
        print('<', s, '> is not acceptable.', sep='')

(+23/5/19)

vowels = ['a', 'e', 'i', 'o', 'u']

while True :
    flag = 0
    vowel = 0
    v_cnt = 0
    c_cnt = 0

    s = input()
    
    if s == 'end' :
        break
    
    for i in range(len(s)) :
        if i > 0 :
            if s[i] == s[i-1] :
                if s[i] != 'e' and s[i] != 'o' :
                    flag = -1
                    break
                    
        if s[i] in vowels :
            vowel = 1 
            v_cnt += 1
            c_cnt = 0
            if v_cnt >= 3 :
                flag = -1
                break
            
        else :
            c_cnt += 1
            v_cnt = 0
            if c_cnt >=3 :
                flag = -1
                break

        
    if flag == 0 and vowel == 1 :
        print('<', s, '> is acceptable.', sep='')
    else :
        print('<', s, '> is not acceptable.', sep='')
            
profile
I mean

0개의 댓글