[Python] 백준 10820번 : 문자열 분석

2025. 4. 1. 13:21

99클럽 코테 스터디 | 비기너 | 2일차





처음 접근 방법

1. 사용자로부터 입력을 받아서 input을 input_list 안에 넣는다

2. for문을 통해 input_list의 입력을 하나씩 읽어온다

3. 각 입력을 다시 for문을 돌리며, if-else문을 통해 대소문자, 숫자, 공백이면 해당 개수를 count한다

3-1. 아스키코드를 이용해서 대소문자를 구분하였다.

 

위와 같이 해결했을 때, 몇 가지 개선 사항이 필요했다.

 

우선, 사용자가 몇 개의 입력을 줄 지 모르는데, 이 경우 처리는 어떻게 해야 하는 것인지 궁금증이 들었다.

두번째, for문이 두번 중첩되기 때문에 시간복잡도 측면에서 몹시 비효율적인 코드이기 때문에 개선이 필요했다.

세번째, 주어진 예시에서 아래와 같은 경우 공백이 포함되지 않은 채로 input_list에 추가되었다. 

 S a M p L e I n P u T

 

네번째, 아스키코드를 활용한 나의 코드가 아닌, 내장 함수에서 대소문자인지, 숫자인지 구분하는 함수가 있을 것 같았다.

 

개선 방법

1. try-except 구문을 통해 EOFError가 뜰 때까지 while문을 반복한다. 이 때, EOFError는 더 이상 입력값이 없을 때까지를 의미한다.

2. 대소문자, 숫자, 공백을 구분하는 is~ 함수가 존재하므로, 이를 활용한다. 

 

# while 루프를 통해 사용자로부터 입력을 계속 받음
while True:
    try:
        string = input()
        answer = [0] * 4    # 차례대로 소문자, 대문자, 숫자, 공백의 개수를 의미

        # string에서 각각의 char에 대하여 확인
        for char in string:
            if char.islower():
                answer[0] += 1
            elif char.isupper():
                answer[1] += 1
            elif char.isdigit():
                answer[2] += 1
            elif char.isspace():
                answer[3] += 1

        # 결과 출력 (공백으로 구분된 네 개의 숫자)
        print(*answer)

    # 입력이 더이상 없을 때 break
    except EOFError:
        break

 


참고 링크

https://haruisshort.tistory.com/120?utm_source=chatgpt.com

 

[파이썬] 10820번: 문자열 분석

10820번: 문자열 분석 (acmicpc.net) 10820번: 문자열 분석 문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오. 각 문자열은 알

haruisshort.tistory.com

 

BELATED ARTICLES

more