백준/브론즈4

[Python] 백준 1264번 - 모음의 개수

두부마라탕 2025. 4. 11. 18:36

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

*어째선지 아무리 엔터를 눌러도 미리보기가 뜨지 않는다 T_T


문제

영문 문장을 입력받아 모음의 개수를 세는 프로그램을 작성하시오. 모음은 'a', 'e', 'i', 'o', 'u'이며 대문자 또는 소문자이다.

 

코드

while True:
    str = input()
    if str == '#':
        break
    vowels = 0
    for i in str:
        if i == 'a' or i == 'e' or i == 'o' or i == 'i' or i == 'u':
            vowels += 1
        if i == 'A' or i == 'E' or i == 'O' or i == 'I' or i == 'U':
            vowels += 1
    print(vowels)

 

풀이

1. while 반복문으로 입력을 계속 받게 했다.

2. 근데 입력받은 값이 "#"이라면 반복문을 멈춘다(break).

3. 그 후로 입력받은 값(str)을 for문에 넣어서 받아온 각 문자(i)가 모음이라면 vowels값은 1씩 늘리도록 했다.

4. 그리고 for문이 끝난 후 총 모음의 개수를 출력한다.

 


개선된 코드 (제너레이터 표현 사용)

while True:
    s = input()
    if s == '#':
        break
    vowels = sum(1 for ch in s if ch in 'aeiouAEIOU')
    print(vowels)

 

처음 짠 코드가 작성할 때도 느꼈지만 길다고 생각해 코드를 줄여보았다.

위에서 짰던 코드와 1, 2번은 동일하다.

모음을 인지하는 방식에서 차이가 난다.

살펴보면 사실 위의 코드 방식과 크게 차이는 나지 않는데 코드를 줄일 수 있다.

 

1, 2. 위와 동일

3-1. for ch in s : 문자열 s의 각 문자를 하나씩 ch라는 변수에 담아 반복

3-2. if ch in 'aeiouAEIOU' : ch가 모음이라면

3-3. 1 : 조건을 만족하는 경우마다 1을 생성

3-4. sum(...) : 그리고 위의 조건을 만족할 때마다 나온 1을 모두 더한다

 

3번의 겨우 리스트 함축과 유사한 generator expression(제너레이터 표현)이다.