[백준알고리즘] 10820번: 문자열 분석 -Python
https://www.acmicpc.net/problem/10820
이번 문제는 문자의 타입을 구분하는 문제이다. 파이썬으로 풀었기 때문에 is~()라는 메서드들을 이용해서 간단하게 해결했다. 파이썬이 아니라 다른 언어로 해결을 하려고 한다면 아스키코드표를 이용하면 될 것이다.
isupper()의 경우 문자가 65~90에 해당할 것이고, islower()의 경우에는 97~122에 해당할 것이다. 숫자의 경우 아스키코드 상으로는 48~57에 해당하게 되고, isspace()에 해당하는 빈 칸은 32에 해당하게 된다.
그리고 문제에서는 몇 개의 테스트 케이스가 주어진다고 정해지지 않았기 때문에 EOF 검사를 해줘야 한다. sys.stdin.readline()으로는 입력이 있었는지 None인지 확인하면 될 것이다.
이와 다르게 input()을 사용했다면, try ~ except 문으로 EOFError를 처리해주면 될 것이다.
주의해야 할 점은 테스트 케이스의 세 번째 예제를 통해 알 수 있듯이 입력에 '\n'도 space를 포함시키기 때문에 strip을 해줘야 하는데, lstrip()은 당연히 해주면 안 되고, rstrip()도 빈칸과 \n을 구분해야 한다. 따라서 rstrip('\n')으로 rstrip에 인자를 넘겨줌으로써 해당 값을 모두 제거해준다. 물론 \n으로 인자를 정의해주지 않으면 공백을 모두 제거하게 된다. 여기에서는 rstrip('\n')을 사용했지만, sys.stdin.readline()[:-1] 도 같은 의미로 사용할 수 있다.
import sys
while True:
line = sys.stdin.readline().rstrip('\n')
up, lo, sp, nu = 0, 0, 0, 0
if not line:
break
for l in line:
if l.isupper():
up += 1
elif l.islower():
lo += 1
elif l.isdigit():
nu += 1
elif l.isspace():
sp += 1
sys.stdout.write("{} {} {} {}\n".format(lo, up, nu, sp))
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 1158, 1168번: 요세푸스 문제, 요세푸스 문제 2 -Python (4) | 2020.02.18 |
---|---|
[백준알고리즘] 1406번: 에디터 -Python (0) | 2020.02.16 |
[백준알고리즘] 11652번: 카드 -Python (0) | 2020.02.16 |
[백준알고리즘] 10825번: 국영수 -Python (0) | 2020.02.16 |
[백준알고리즘] 11650, 11651번: 좌표 정렬하기, 좌표 정렬하기 2 -Python (0) | 2020.02.13 |