백준 1152번(단어의 개수)

wau2380(yijung park)·2021년 8월 14일
0
post-thumbnail

문제

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

입력

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

출력

첫째 줄에 단어의 개수를 출력한다.

논리

일단 단어의 개수를 구분하는 방법은 " 공백의 갯수 + 1 "을 하면 단어의 갯수를 알 수 있습니다.
코드로 표현하면 다음과 같습니다.

string = input() # 문장 입력받기
count = 1 # 위에 설명처럼 단어는 공백의 갯수 + 1 이므로 1로 정의
for i in range(0,len(string)):
    if string[i] == " ":
        count+=1 

그러나, 우리가 집중해야 할 것은 "또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다." 라는 점이다.

만약에 아래와 같은 문장이 있다.

Hello my name is wau2380

문자열 앞에 공백이 존재하므로 위 알고리즘은 4개가 아닌 5개로 인식하게 되어 틀리게 된다.

근데, 앞뒤의 공백만 지워주면 되기 때문에 상당히 쉬운 문제이다.

아래와 같은 코드를 작성해보자.

if string[0] == " ": # 앞 공백 제거
    count-= 1
if string[len(string)-1] == " ": # 뒤 공백 제거
    count-= 1

결과

string = input()
count = 1

for i in range(0,len(string)):
    if string[i] == " ":
        count+=1
        
if string[0] == " ":
    count-= 1
if string[len(string)-1] == " ":
    count-= 1

print(count)

더 좋은 알고리즘이 있다면 댓글로 알려주세요!

profile
학생 프로그래머

0개의 댓글

관련 채용 정보