https://www.acmicpc.net/problem/10820
{문제}
입력 예시
{예시}
출력 예시
{출력}
import sys
while True: #입력될 문자열 갯수를 모르니 반복문 안에서 입력받기
output = [0]* 4 #[0,0,0,0]과 같다.
line = sys.stdin.readline().rstrip('\n') #입력된 문자열의 오른쪽에 있는 공백문자중 줄바꿈기호만 지우기
if not line: #입력받은 문자열이 없으면
break #반복문 부수기
for i in line : #입력받은 문자열 중 문자 하나씩 검사
if 'a' <= i <= 'z':
output[0] += 1
if 'A' <= i <= 'Z':
output[1] += 1
if '0' <= i <= '9':
output[2] += 1
if i == ' ':
output[3] += 1
print(' '.join(map(str,output)))
문제가 안풀려서 인터넷을 참고했다.
갑자기 어려운 문제들을 만나니 멘탈이 바삭바삭해졌다.
그런데 rstrip이 공백문자를 없앨때 줄 바꿈문자 \n과 그냥 공백 (스페이스바)도 없앤다.
문자열 끝에 스페이스바를 일부러 넣으면 걔네들은 지워져서 갯수에 안들어간다.
따라서 rstrip('\n') 처럼 나타내면 문자열 오른쪽의 줄바꿈 문자만 없앨수 있다.
비어있는 문자열의 boolean 값은 False이다
if not line:
break
입력이 없으면 line의 bool값은 false가 되고,
not은 bool값을 반전시켜 반복문을 끝낼 수 있다.
이후에 문제를 다시 풀어보았다.
import sys
output = []
while True:
line = sys.stdin.readline().rstrip('\n')
if not line:
break
count = [0,0,0,0]
for i in line:
if i.islower():
count[0] += 1
if i.isupper():
count[1] += 1
if '0' <= i <= '9':
count[2] += 1
if ' ' == i:
count[3] += 1
output.append(count)
for i in output:
print(' '.join(map(str,i)))
첫 코드는 입력을 한줄 받으면 즉시 한줄을 출력했지만
두번째 코드는 모든 입력이 끝날때까지 output에 출력물을 모아놨다가 마지막에 출력한다.