문제

문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.

각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.

www.acmicpc.net/problem/10820

  • 입력

첫째 줄부터 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)))

참고 사이트