백준 10820번: 문자열 분석
📌 문제
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
입력
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
출력
첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
📝 문제 접근 방법
아이디어
문자열을 순회하면서 각각의 문자 유형(소문자, 대문자, 숫자, 공백)을 분류하고, 개수를 카운트하면 됩니다.
- 입력 처리
- 여러 줄의 문자열이 주어지므로 sys.stdin.read()를 사용하여 한 번에 입력을 받고 splitlines()를 통해 줄 단위로 나눕니다.
- 각 줄을 순회하며 처리를 진행합니다.
- 문자 분류와 개수 카운트
- 문자열의 각 문자를 확인하면서 다음 조건에 따라 분류합니다
- 소문자: islower() 로 확인
- 대문자: isupper() 로 확인
- 숫자: isdigit() 로 확인
- 공백: isspace() 로 확인
- 각각의 조건에 해당하는 문자의 개수를 sum() 을 이용해 한 줄씩 계산합니다.
- 문자열의 각 문자를 확인하면서 다음 조건에 따라 분류합니다
주의사항
- 빈 문자열 처리
- 입력 문자열 중에 완전히 빈 문자열 또는 공백으로만 이루어진 문자열이 포함될 수 있습니다.
- 이런 경우에도 소문자, 대문자, 숫자, 공백 개수를 각각 0 0 0 n 형태로 출력해야 합니다.
👩💻 나의 답안
import sys
lines = sys.stdin.read().splitlines()
for line in lines:
lower_count = sum(1 for char in line if char.islower()) # 소문자 개수
upper_count = sum(1 for char in line if char.isupper()) # 대문자 개수
digit_count = sum(1 for char in line if char.isdigit()) # 숫자 개수
space_count = sum(1 for char in line if char.isspace()) # 공백 개수
print(lower_count, upper_count, digit_count, space_count)
✨ 새로 알게 된 점
1. 여러 줄 입력 처리 방법
여러 줄 입력을 처리할 때 sys.stdin.read() 와 splitlines() 를 조합하는 방식이 매우 효과적이라는 것을 배웠습니다. sys.stdin.read() 는 표준 입력을 한꺼번에 읽어와 처리할 수 있게 해주며, 여러 줄의 데이터를 한꺼번에 받아야 하는 상황에서 특히 유용합니다. 여기에 splitlines() 를 사용하면 입력 데이터를 줄 단위로 나누면서, 각 줄 끝에 있는 줄바꿈 문자(\n) 를 자동으로 제거해 준다는 점이 큰 장점입니다.
'코딩테스트 대비' 카테고리의 다른 글
[파이썬(Python)] 백준 11656번 접미사 배열 (0) | 2024.11.18 |
---|---|
[파이썬(Python)] 백준 11655번 ROT13 (0) | 2024.11.17 |
[파이썬(Python)] 백준 10809번 알파벳 찾기 (0) | 2024.11.15 |
[파이썬(Python)] 백준 10808번 알파벳 개수 (0) | 2024.11.15 |
[파이썬(Python)] 백준 1918번 후위 표기식 (0) | 2024.11.14 |