python

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

vhxpffltm 2020. 4. 27. 22:05

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

 

문제의 출처는 위에 있다. 이 문제는 시키는대로 하면 되는 문제인데 C++이 아닌 python으로 풀면서 python 코딩에 익숙해지기 위함이다.

 

여기서는 'in' 문법을 사용하면 조금이나마 간결하게 풀 수 있다.

 

먼저 처음 푼 코드는 아래와 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def f(a):
    if a == 'a' or a == 'e' or a == 'i' or a == 'o' or a == 'u'return 1
    elsereturn 2
while True:
    s = input()
    chk,chk2 = 0,0
    if s == "end": break;
    for i in range(len(s)-1):
        if (s[i] != 'e' and s[i] != 'o' and s[i] == s[i+1]): chk=1
        #print(s[i],i)
    for i in s:
        if i == 'a' or i == 'e' or i == 'i' or i == 'o' or i == 'u': chk2=1
    for i in range(len(s)-2):
        if f(s[i]) == 1 and f(s[i+1]) == 1 and f(s[i+2]) == 1:chk=1
        elif f(s[i]) == 2 and f(s[i+1]) == 2 and f(s[i+2]) == 2: chk=1
    #(chk)print
    if chk == 1 or chk2 == 0print("<" + s + "> is not acceptable." )
    elseprint("<" + s + "> is acceptable." )
 

 

평소 C++ 언어로 푼것과 비슷하다. 모음을 체크하는 부분과 배열 인덱스로 해결할 수도 있지만 

pyhton 'in' 문법으로 해결해본다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
= "aeiou"
while True:
    s = input()
    chk,chk2 = 0,0
    if s == "end": break;
    for i in s:
        if i in l:
            chk2=1
    #print(chk2)
    for i in range(1,len(s)):
        if s[i] == s[i-1and s[i] not in 'eo': chk=1
    #print(chk)
    for i in range(len(s)-2):
        if s[i] in l and s[i+1in l and s[i+2in l: chk=1
        elif s[i] not in l and s[i+1not in l and s[i+2not in l: chk=1
    #print(chk)
    if chk == 1 or chk2 == 0print("<" + s + "> is not acceptable." )
    elseprint("<" + s + "> is acceptable." )
 

 

처음 부분을 보면 리스트 l에 'in' 을 사용하여 해당 문자가 모음에 속하는지 단번에 알 수 있다.

또한, 문자열 'eo'를 바탕으로 이전 문자와 현재 문자를 비교하고 그것이 'eo'가 아닌지 체크한다.

마지막은 연속된 3자리의 모음 혹은 자음을 확인하는 부분이다.