https://www.acmicpc.net/problem/10820
문제 설명
문자열 N개가 주어진다. 이때, 문자열에 포함되어 있는 소문자, 대문자, 숫자, 공백의 개수를 구하는 프로그램을 작성하시오.
각 문자열은 알파벳 소문자, 대문자, 숫자, 공백으로만 이루어져 있다.
풀이 과정
- 나의 풀이 (첫번째)
# 10820 문자열 분석
while True :
try :
text_lst = list(input())
lower , upper, num, blank = 0,0,0,0
for i in range(len(text_lst)) :
if text_lst[i] == " " :
blank += 1
elif 65 <= ord(text_lst[i]) <= 90 :
upper += 1
elif 97 <= ord(text_lst[i]) <= 122 :
lower += 1
else :
num += 1
print(lower,upper,num,blank)
except EOFError :
break
처음에 분명 맞게 푼 것 같은데 "틀렸습니다"가 뜨길래 뭐가 문제지..했는데 알고 보니 보통 문제에서 입력값의 개수, 즉 T(테스트케이스)가 주어지는데 이 문제는 안 주어짐을 깨닫고 while문으로 무한 루프를 돌리며 EOFError인 상황만 제외하고는 반복문이 돌아가도록 하였다. (참고로 EOFError인 상황은 더 이상 입력값이 없는 상황임..!! 그렇기에 이 문제에서는 입력값을 전부 받고 입력 받을 수 없는 상황에서는 반복문을 break!!)
코드 부분을 설명하자면 일단 입력되는 구문을 리스트화시키고 리스트 요소를 하나하나 대문자인지, 소문자인지, 공백인지 숫자인지 뜯어보았다. 대문자인지 소문자인지는 아스키코드 분류법을 이용하였다...!!
- 나의 풀이 (두번째)
while True :
try :
text = input()
lower = sum(i.islower() for i in text)
upper = sum(i.isupper() for i in text)
num = sum(i.isdigit() for i in text)
blank = sum(i.isspace() for i in text)
print(lower,upper,num,blank)
except EOFError :
break
내 풀이를 개선하고 싶어 구글링을 통해 문자열이 대문자인지, 소문자인지, 숫자인지, 공백인지 확인하는 함수를 찾았다...!! 바로바로 특정 모듈도 필요 없는 is~()구문!!!
for문과 sum을 통해 더욱 완벽히 보안했다..!
- 퍼온 풀이 (세번째)
https://yuuj.tistory.com/148 요기서 참고했다..!!
import sys
while True:
line = sys.stdin.readline().rstrip('\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)
와우.. 이 풀이엔 정말 대박꿀팁이 있다.
일단 sys.stdin.readline() 함수는 문자열을 입력 받고 바로 \n(줄바꿈)을 해준다..!! 그렇기에 일단 줄바꿈을 무시할려고 .rstrip('\n')을 해줬다.
그리고 try,except 구문을 사용한 것이 아닌 if not 구문을 통해 간단히 예외처리를 해주었다. 아무것도 입력되지 않았을 때는 line이 아무것도 아니기에 if not 구문에서 걸러진다.
그리고 나머지 코드 부분은 내 2번째 풀이 부분과 겹친다.
후기
백준 문제는 재밌고 유익한듯하다..... 브론즈 문제라 할지언정 배우는게 항상 있다..!!
'Algorithm' 카테고리의 다른 글
[백준] 10808 알파벳 개수 (파이썬 Python) (0) | 2021.08.16 |
---|---|
[백준] 11655 ROT13 (파이썬 Python) (0) | 2021.08.12 |
[백준] 1406 에디터 (파이썬 Python) (0) | 2021.07.17 |
[백준] 11718 그대로 출력하기 파이썬(Python) (0) | 2021.07.10 |
[백준] 1935 후위 표기식2 (파이썬 Python) (0) | 2021.07.10 |