[ 백준 문제 1152 / 파이썬 ] 단어의 개수
2023. 2. 10. 18:45ㆍ백준/파이썬
영어 대소문자와 공백으로 이루어진 문자열이 주어진다.
이 문자열에는 몇 개의 단어가 있을까?
이를 구하는 프로그램을 작성하시오.
단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
words = list(input().split(' '))
print(len(words))
이 문제는
이런식으로 split에 한 칸 공백을 주게 되면 틀리는데요.
words라는 리스트에 두번째 예제 입력하면
[ ' ', 'The', 'first', 'character', 'is', 'a', 'blank']
이런 리스트가 출력됩니다.
리스트의 길이는 의도하지 않았던 7이 나오게 되죠.
양쪽 공백으로 이런 문제가 생기는 것 같은데,
strip을 써주면 어떨까요?
words = list(input().strip().split(' '))
print(len(words))
이렇게 해주면 되지 않을까요?
예제 입력값을 넣어줘도 정답이 출력됩니다.
근데 틀립니다.
예외가 하나 있었던 거였어요.
그건 바로
공백만 입력받았을 때 !
그러면 단어가 0개여야하는데 len이 1로 잡혀 버려서 틀린 답이 돼요.
split()은 공백이 몇번이든 간에 하나의 공백으로 처리가 되고
split(" ")은 공백을 한 개 한 개 모두 다른 공백으로 처리 합니다.
하나의 구분자가 리스트에 생성이 되어 len이 1로 잡혔나 봅니다.
이 예외를 고려하지 않았기에
이런 에러가 발생했던 겁니다.
정답1)
words = list(input().split())
print(len(words))
정답2)
words = list(input().strip().split())
print(len(words))
strip이 필수적으로 사용되는 문제는 아닙니다.
split() 자체만으로 구분이 돼요.
strip() : 공백제거
.strip() : 양쪽 공백 제거
.lstrip() : 왼쪽 공백 제거
.rstrip() :오른쪽 공백 제거
'백준 > 파이썬' 카테고리의 다른 글
[ 백준 문제 1157 / 파이썬 ] 단어 공부 (0) | 2023.02.10 |
---|---|
[ 백준 문제 2675 / 파이썬 ] 문자열 반복 (0) | 2023.02.09 |
[ 백준 문제 10809 / 파이썬 ] 알파벳 찾기 (1) | 2023.02.09 |
[ 백준 문제 11720 / 파이썬 ] 숫자의 합 (0) | 2023.02.09 |
[ 백준 문제 11654 / 파이썬 ] 아스키 코드 (1) | 2023.02.09 |