[자료구조(참고)] [BJ10820] 문자열 분석
✏️ 𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/백준 알고리즘

[자료구조(참고)] [BJ10820] 문자열 분석

코드 플러스

🚩 문제 설명

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

 

10820번: 문자열 분석

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

www.acmicpc.net

BJ10820

 

⏱️ 시간 복잡도
▪ 주어지는 문장의 갯수가 N이라면 시간복잡도는 O(N)이라고 할 수 있다.

◾ 소문자 / 대문자 / 숫자 / 공백의 갯수를 출력하는 문제

◾ 문자열 확인

  • islower() ➡️ 소문자 인가 아닌가
  • isupper() ➡️ 대문자 인가 아닌가
  • isdigit() ➡️ 숫자인가 아닌가
  • isspace() ➡️ 공백인가 아닌가

 

 

 


 

 

 

입출력

1) 첫번째 줄부터 N번째 줄 까지 각각 문자열이 주어진다.
return ➡️ 각 문자열의 문자의 소문자/대문자/숫자/공백의 갯수를 공백을 기준으로 출력한다.

✔️ 예제 1

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

 

 

 


 

 

 

📑 문제 풀이

with 파이썬 (Python)

import sys

while True:
    S = sys.stdin.readline().strip('\n')

    if not S:
        break

    l, u, d, e = 0, 0, 0, 0
    for s in S:
        s = ord(s)
        if s in range(ord('a'), ord('z') + 1):
            l += 1
        elif s in range(ord('A'), ord('Z') + 1):
            u += 1
        elif s in range(ord('0'), ord('9') + 1):
            d += 1
        elif s == ' ':
            e += 1

    print(l, u, d, e)
더보기

다른 코드

import sys

while True:
    line = sys.stdin.readline().strip('\n')

    if not line:
        break

    l, u, d, s = 0, 0, 0, 0
    for each in line:
        if each.islower():
            l += 1
        elif each.isupper():
            u += 1
        elif each.isdigit():
            d += 1
        elif each.isspace():
            s += 1

    print(l, u, d, s)

💬 Point

➡️  range(ord('A'), ord('Z') + 1)
➡️  sys.stdin.readline().strip('\n')

◾ 만약 입력이 들어오지 않는 다면 break를 걸어준다.

◾ 문자열의 각 문자가 알파벳 혹은 숫자, 공백에 해당하는지 확인하고 카운트 해준다.

◾ 입력의 갯수가 들어오지 않아서 당황했던 문제

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 코드 플러스 문자열 분석 파이썬

# 백준 10820 문자열 분석 파이썬 python


 

728x90