본문 바로가기

알고리즘

C언어 - 백준 1152 단어의 개수

728x90

문제

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

입력

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

출력

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

★소스코드★

#include <stdio.h> 
#include <string.h>

int main() {
int cnt = 1;
char S[1000000];
scanf("%[^\n]s", S);
for (int i = 0; i < strlen(S); i++) {
if (S[i] == ' ')
cnt++;
}

if (S[0] == ' ' && S[strlen(S) - 1] == ' ')
cnt -= 2;
else if (S[0] == ' ')
cnt -= 1;
else if (S[strlen(S) - 1] == ' ')
cnt -= 1;

printf("%d", cnt);
}

★정리★

단어를 파악하기 위해서는 띄어쓰기의 개수를 알아야 한다. 그래서 공백(' ')이 들어간 배열의 인덱스를

찾아서 cnt++를 해준다. 이때 문제에서 처음과 끝에도 공백이 있을 수 있다고 한다.  그래서 나중에

그 경우의 cnt는 -를 해주어서 단어의 개수를 파악했다.

728x90

'알고리즘' 카테고리의 다른 글

C언어 - 백준 5622 다이얼  (0) 2020.03.16
C언어 - 백준 2908 상수  (0) 2020.03.16
C언어 - 백준 1157 단어공부  (0) 2020.03.15
C언어 - 백준 2675 문자열 반복  (0) 2020.03.15
C언어 - 백준 10809 알파벳 찾기  (0) 2020.03.14