문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.
첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.
This is String
SPACE 1 SPACE
S a M p L e I n P u T
0L1A2S3T4L5I6N7E8
10 2 0 2
0 10 1 8
5 6 0 16
0 8 9 0
문제를 보면 N번째 줄까지라고 해놓고 N개를 주지 않아서 입력이 언제까지 들어오는줄 모른다 .
문제의 로직보다 EOF 처리를 어떻게할지 고민하는게 더 오래 걸렸던 문제였다.
파이썬의 경우에는 EOF 처리를 두가지 방법으로 할 수 있는데 try ~ except EOFError 로 문자열이 들어오지 않을때 break 문을 걸어서 강제로 종료 시키는 방법
두번째로는 input을 불러올때 readline 까지 가져오는 방법이 있다
line = sys.stdin.readline().rstrip('\n')
if not line :
~~~~
결론적으로는 난 첫번째 방법을 썼지만 pycharm 인터프리터내에서 EOF를 못잡아서 왜 안되지 고민했는데... 백준은 통과가 되었다 (?)
아 코드설명은 아스키코드에 따라 딕셔너리로 넣는 방법을 썼다
while True:
try:
words = input()
except EOFError:
break
word = {
'lower': 0,
'upper': 0,
'number': 0,
'space': 0,
}
for i in words:
if 'A' <= i <= 'Z':
word['upper'] += 1
elif 'a' <= i <= 'z':
word['lower'] += 1
elif i == ' ':
word['space'] += 1
else:
word['number'] += 1
print(*word.values())