문제
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
- 입력
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
- 출력
첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
최종 코드
문제는 어렵지 않다. 아래와 같이 풀었다.
import sys
lines = sys.stdin.readlines()
for line in lines:
cnt = [0, 0, 0, 0]
for ch in line:
if ch.islower():
cnt[0] += 1
elif ch.isupper():
cnt[1] += 1
elif ch.isdigit():
cnt[2] += 1
elif ch.isspace() and ch != '\n':
cnt[3] += 1
for x in cnt:
print(x, end =" ")
print()
Enhanced
이 문제는 정규 표현식 re를 사용해서 풀면 훨씬 간단하다. 아니 정규 표현식을 배워놓고는 왜 적용할 생각을 못했을까!!
정규 표현식에 대한 자세한 내용은 빅데이터 수업 자료를 참고하자! 어쨌든 정규표현식을 사용한 코드는 아래와 같다.
import sys, re
lines = sys.stdin.readlines()
for line in lines:
line = line.rstrip('\n')
lo = re.compile('[a-z]')
up = re.compile('[A-Z]')
di = re.compile('[0-9]')
sp = re.compile('\s')
print(len(lo.findall(line)), len(up.findall(line)),
len(di.findall(line)), len(sp.findall(line)))
참고 사이트
- [Python] 백준 10820 문자열 분석 yeon-woo-kim.tistory.com/80