본문 바로가기

Univ/Python Programming

[문제 15] 문자열에서 모음과 자음 세기 - Python 풀이

주어진 문자열에서 모음과 자음의 개수를 각각 세어서 출력하는 프로그램을 작성한다. 문자열의 길이는 최대 100이다.

입력 예시

첫째 줄에 문자열이 주어진다.

출력 예시

모음 개수와 자음 개수를 각각 "Vowels: 값", "Consonants: 값" 형식으로 출력한다.

예제 테스트케이스

예제 1

입력 예시
출력 예시
ProgrammingIsFun
Vowels: 5
Consonants: 11

예제 2

입력 예시
출력 예시
HelloWorld
Vowels: 3
Consonants: 7

정답 코드

s = input()

vowels = 0
consonants = 0

for ch in s:
    if ch in "aeiouAEIOU":
        vowels += 1
    else:
        consonants += 1

print(f"Vowels: {vowels}")
print(f"Consonants: {consonants}")

1. 코드 설명

이 코드는 입력된 문자열을 앞에서부터 한 글자씩 확인하면서, 현재 문자가 모음이면 vowels를 1 증가시키고, 그렇지 않으면 consonants를 1 증가시키는 방식이다.
문자열 전체를 끝까지 확인한 뒤, 모음 개수와 자음 개수를 각각 정해진 형식으로 출력한다.

먼저 문자열을 입력받는다.

s = input()

그다음 모음 개수와 자음 개수를 셀 변수 두 개를 0으로 시작한다.

vowels = 0
consonants = 0

이후 문자열 s를 앞에서부터 한 글자씩 순회한다.

for ch in s:

여기서 ch에는 문자열의 각 문자가 차례대로 들어간다.
예를 들어 입력이 HelloWorld이면 H, e, l, l, o 같은 식으로 하나씩 들어간다.

현재 문자가 모음인지 확인하는 부분은 다음과 같다.

if ch in "aeiouAEIOU":
    vowels += 1
else:
    consonants += 1

ch in "aeiouAEIOU"는 현재 문자가 a, e, i, o, u 또는 대문자 A, E, I, O, U 중 하나인지 검사하는 뜻이다.
참이면 모음이므로 vowels를 증가시키고, 거짓이면 자음으로 보고 consonants를 증가시킨다.

예를 들어 ProgrammingIsFun을 순회하면

  • o, a, i, I, u는 모음이므로 vowels가 증가하고
  • 나머지 문자는 자음이므로 consonants가 증가한다.

마지막에는 계산된 값을 문제에서 요구한 형식대로 출력한다.

print(f"Vowels: {vowels}")
print(f"Consonants: {consonants}")

따라서 문자열 전체를 한 번만 보면서 모음과 자음 개수를 각각 셀 수 있다.


2. 사용된 문법과 표현

input()

s = input()
  • 한 줄을 문자열로 입력받는다.
  • 사용 형태:
input()

for문

for ch in s:
  • 문자열의 문자를 앞에서부터 하나씩 꺼내 반복한다.
  • 사용 형태:
for 변수 in 반복가능한값:
    실행할 코드

in

ch in "aeiouAEIOU"
  • 어떤 값이 문자열 안에 포함되어 있는지 확인한다.
  • 사용 형태:
값 in 문자열

if문

if ch in "aeiouAEIOU":
    vowels += 1
else:
    consonants += 1
  • 조건이 참인지 거짓인지에 따라 다른 코드를 실행한다.
  • 사용 형태:
if 조건:
    실행할 코드
else:
    실행할 코드

+=

vowels += 1
consonants += 1
  • 기존 값에 1을 더한 뒤 다시 저장한다.
  • 사용 형태:
변수 += 값

f-string

print(f"Vowels: {vowels}")
  • 문자열 안에 변수 값을 넣어 출력한다.
  • 사용 형태:
f"문자열 {변수}"

print()

print(f"Vowels: {vowels}")
print(f"Consonants: {consonants}")
  • 값을 화면에 출력한다.
  • 사용 형태:
print(값)

3. 실수하기 쉬운 부분

모음 문자열에 대문자를 넣지 않는 경우

if ch in "aeiou":
    vowels += 1
else:
    consonants += 1
  • 대문자 모음 A, E, I, O, U를 모음으로 세지 못한다.

모음이 아닌 문자를 모두 자음으로 처리하는 경우

else:
    consonants += 1
  • 이 코드는 문제에서 영문자만 들어온다고 볼 때는 괜찮지만, 공백이나 숫자가 포함되면 그것까지 자음으로 세게 된다.

출력 형식을 다르게 쓰는 경우

print(vowels, consonants)
  • 문제는 "Vowels: 값", "Consonants: 값" 형식을 요구하므로 출력 형식이 틀린다.

문자열 전체를 한 번에 비교하려는 경우

if s in "aeiouAEIOU":
    vowels += 1
  • 이 코드는 문자열 전체를 검사하므로 한 글자씩 세는 문제에 맞지 않는다.

4. 핵심 정리

이 문제는 문자열을 한 글자씩 보면서 현재 문자가 모음 목록에 포함되는지만 검사하면 해결된다.
핵심은 for문으로 문자 하나씩 순회하고, 모음이면 vowels, 아니면 consonants를 증가시키는 것이다.