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(제너레이터 표현)이다.
'백준 > 브론즈4' 카테고리의 다른 글
| [Python/C] 백준 2742번 - 기찍 N (0) | 2025.04.13 |
|---|---|
| [Python/C] 백준 2480번 - 주사위 세개 (1) | 2025.04.13 |
| [Python] 백준 5565번 - 영수증 (0) | 2025.04.13 |
| [Python/C] 백준 2530번 - 인공지능 시계 (0) | 2025.04.13 |
| [Python] 백준 2083번 - 럭비 클럽 (2) | 2025.04.13 |