Algorithm/백준

[BOJ] 10820 - 문자열 분석

비번변경 2022. 1. 31. 19:20

문제

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)