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
else: return 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 == 0: print("<" + s + "> is not acceptable." )
else: print("<" + s + "> is acceptable." )
|
평소 C++ 언어로 푼것과 비슷하다. 모음을 체크하는 부분과 배열 인덱스로 해결할 수도 있지만
pyhton 'in' 문법으로 해결해본다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
l = "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-1] and s[i] not in 'eo': chk=1
#print(chk)
for i in range(len(s)-2):
if s[i] in l and s[i+1] in l and s[i+2] in l: chk=1
elif s[i] not in l and s[i+1] not in l and s[i+2] not in l: chk=1
#print(chk)
if chk == 1 or chk2 == 0: print("<" + s + "> is not acceptable." )
else: print("<" + s + "> is acceptable." )
|
처음 부분을 보면 리스트 l에 'in' 을 사용하여 해당 문자가 모음에 속하는지 단번에 알 수 있다.
또한, 문자열 'eo'를 바탕으로 이전 문자와 현재 문자를 비교하고 그것이 'eo'가 아닌지 체크한다.
마지막은 연속된 3자리의 모음 혹은 자음을 확인하는 부분이다.
'python' 카테고리의 다른 글
[python] 엑셀 데이터 추출 및 메모장 데이터 가져오기 (0) | 2020.04.30 |
---|---|
[python] 백준 6219 소수의 자격 *리스트 초기화* (1) | 2020.04.27 |
[python] 리스트 정렬, 람다식, list 응용 (0) | 2020.03.29 |
[Python]리스트 기본, split, 슬라이싱, 부분집합(Powerset) 구하기 (0) | 2019.09.10 |
[python] 람다식(lambda) map (0) | 2019.08.26 |