[BOJ_10820] 문자열 분석

김윤빈·2021년 6월 14일
0

algorithm

목록 보기
15/23

문제

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

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

입력

첫째 줄부터 N번째 줄까지 문자열이 주어진다. (1 ≤ N ≤ 100) 문자열의 길이는 100을 넘지 않는다.

출력

첫째 줄부터 N번째 줄까지 각각의 문자열에 대해서 소문자, 대문자, 숫자, 공백의 개수를 공백으로 구분해 출력한다.

예제 입력 1 복사

This is String
SPACE    1    SPACE
 S a M p L e I n P u T     
0L1A2S3T4L5I6N7E8

예제 출력 1 복사

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())
profile
I'm yunbin

0개의 댓글