문제
https://www.acmicpc.net/problem/10820
임의의 개수의 문자열을 입력받아, 문자열에 포함된 소문자, 대문자, 숫자, 공백의 개수를 구하여라.
내 풀이
체크할 것과 그 개수를 key, value로 하는 딕셔너리를 사용했다.
문자열 입력을 시도한 후 입력이 있으면 소문자, 대문자, 숫자, 공백의 개수를 확인하고, 입력이 없으면 프로그램을 종료한다.
숫자는 형변환 시도 시 에러 여부 발생으로 확인했다.
import sys
while True:
d = {"lower": 0, "upper": 0, "number": 0, "space": 0}
try:
s = input()
for t in s:
if t == " ": # 공백
d["space"] += 1
else:
try: # 숫자
int(t)
d["number"] += 1
except: # 대소문자
d["upper" if t.isupper() else "lower"] += 1
print(" ".join([str(v) for (k, v) in d.items()]))
except:
exit()
다른 풀이
1. 문자 비교 연산 사용
단순하게 문자의 범위를 비교하여 풀이하는 방법도 있다.
import sys
for x in sys.stdin:
res = [0] * 4
for c in x:
if 'a' <= c <= 'z':
res[0] += 1
elif 'A' <= c <= 'Z':
res[1] += 1
elif '0' <= c <= '9':
res[2] += 1
elif c == ' ':
res[3] += 1
print(*res)
2. 문자열 확인 함수 사용
문자열이 대문자인지, 소문자인지 등을 확인하는 함수를 사용한다. 숫자 또는 공백 여부를 확인하는 함수 또한 존재한다.
import sys
while True:
line = sys.stdin.readline()[:-1]
li = [0] * 4
if not line:
break
for l in line:
if l.islower():
li[0] += 1
elif l.isupper():
li[1] += 1
elif l.isdigit():
li[2] += 1
elif l.isspace():
li[3] += 1
print(*li)