#51. 백준 1152번 문제 풀이: 단어의 개수 | 문제 원본 보기 |
--입력-- The Curious Case of Benjamin Button --출력-- 6 --입력-- The first character is a blank --출력-- 6 --입력-- The last character is a blank --출력-- 6
문자열에서 단어는 공백문자로 구분되기 때문에 공백문자의 개수에 +1을 해주면 단어개수가 된다. 주의 할 것은 첫글자와 마지막 글자의 공백은 무시해야 한다. 처음과 마지막 공백은 언어에 따라 trim 함수가 지원되지만 여기서는 루프를 돌려서 직접 처리하도록 구현하겠다. 이문제의 핵심사항 중 하나는 공백문자를 포함한 문자열을 입력받는 방법이다. C의 scanf() 나 C++ std::cin 은 기본적으로 공백이나 엔터키 까지 끊어서 입력 받는다. 소스에 공백포함해서 입력받는 설명을 해두었으니 참고바람.
문자열을 입력받을 때 scanf 는 기본적으로 공백이나 엔터키까지 끊어서 받는다. 그래서 공백문자를 포함해서 문자열을 받으려면 아래와 같이 사용한다. scanf("%[^\n]s", s); scanf 에 %[^\n] 포맷을 해 주면 엔터키 전까지 공백 포함해서 문자열을 받을 수 있다.
#include <stdio.h>
#include <string.h>
int main() {
int i, l, count = 0;
char s[1000001];
scanf("%[^\n]s", s); // scanf 에 %[^\n] 포맷을 해 주면 엔터키 전까지 공백 포함해서 문자열을 받을 수 있다.
l = strlen(s);
count = 0; // 단어갯수 카운트
for(i = 0; i < l; i++) {
if(s[i] == ' ') count++; // 공백문자라면 단어갯수 카운트 증가
}
if(s[0] == ' ') count--; // 첫글자가 공백이면 카운트 감소
if(s[l-1] == ' ') count--; // 마지막 글자가 공백이면 카운트 감소
printf("%d", count + 1); // 단어개수 출력: 공백수 +1
return 0;
}