본문 바로가기
공부/알고리즘

[알고리즘][백준] 10820번 문자열 분석 - 파이썬(python) 풀이

by 무명오리 2024. 2. 27.

https://www.acmicpc.net/problem/10820

 

10820번: 문자열 분석

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

www.acmicpc.net

 


나의 코드

 

대문자, 소문자, 숫자를 리스트에 넣고 있는지 없는지 확인하는 방식을 사용했다.

import sys

big = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
small = list("abcdefghijklmnopqrstuvwxyz")
num = list("1234567890")


while True:
    try:
        input = sys.stdin.readline().rstrip()
        result = [0] * 4    
        for i in input:
            if i in small:
                result[0] += 1
            elif i in big:
                result[1] += 1
            elif i in num:
                result[2] += 1
            else:
                result[3] += 1

        print(*result)
    except EOFError:
        break

 

출력초과....

출력 초과(EOFError)가 발생하는 이유는, 입력을 받는 부분에서 입력이 끝나지 않고 계속해서 입력을 기다리기 때문입니다. 라고 뤼센세가 알려주셨다..

 

2차

import sys

big = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
small = list("abcdefghijklmnopqrstuvwxyz")
num = list("1234567890")


while True:
    input = sys.stdin.readline().rstrip()

    if not input:
        break

    result = [0] * 4    
    for i in input:
        if i in small:
            result[0] += 1
        elif i in big:
            result[1] += 1
        elif i in num:
            result[2] += 1
        else:
            result[3] += 1

    print(*result)

 

틀렸다고 뜬다.. 어째서인가 예제를 다시 입력하니

3번째 예제 입력에서 뒤에 공백이 쭉 있었던 것...!

2번 예제까지만 확인한건 어떻게 알고... rstrip()을 넣은것이 문제였다

 

그렇게 또또 수정 rstrip() -> rstrip('\n')

import sys

big = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
small = list("abcdefghijklmnopqrstuvwxyz")
num = list("1234567890")


while True:
    input = sys.stdin.readline().rstrip('\n')

    if not input:
        break

    result = [0] * 4    
    for i in input:
        if i in small:
            result[0] += 1
        elif i in big:
            result[1] += 1
        elif i in num:
            result[2] += 1
        else:
            result[3] += 1

    print(*result)

 

정답!!

 

다른 분들은 나처럼 리스트가 아닌 isupper(), islower(), isdigit()을 활용하시더라.... 참고하시길