[ 백준 문제 1152 / 파이썬 ] 단어의 개수

2023. 2. 10. 18:45백준/파이썬

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

영어 대소문자와 공백으로 이루어진 문자열이 주어진다.
이 문자열에는 몇 개의 단어가 있을까?
이를 구하는 프로그램을 작성하시오.
단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

 

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() :오른쪽 공백 제거