문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1 복사
The Curious Case of Benjamin Button
예제 출력 1 복사
6
예제 입력 2 복사
The first character is a blank
예제 출력 2 복사
6
예제 입력 3 복사
The last character is a blank
예제 출력 3 복사
6
처음에는 단순하게 스페이스의 개수에 1개를 더하여 풀려하였다. 이렇게 푸는 순간 가장 처음에 스페이스가 나오는 순간에 개수가 달라지게 되고 이것을 해결하더라도 문자는 없고 스페이스만 하나 나온 문장을 해결하지 못하게 된다.
그래서 다르게 푼 것이 아래의 코드이다
문자가 나온후 스페이스가 나와야 한개의 단어가 되는것이다 라는 규칙을 이용하여 문자가 나왔을때 chk변수를 0으로 만든후 스페이스가 나오면 chk변수를 1로 바꾸면 한개의 문자가 완료되었다는 것을 의미하니 cnt에 개수를 늘려주는 방식으로 문제를 풀었다.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
	char sen[1000000];
	int len,cnt=0,chk=1;
	gets(sen);
	len = strlen(sen);
	for (int i = 0; i < len; i++)
	{
		if (sen[i] != ' '&&chk==1)
		{
			cnt++;
			chk = 0;
		}
		if(sen[i]==' ')
		{
			chk = 1;
		}
	}
	printf("%d", cnt);
}
728x90
    
    
  'Algorithm' 카테고리의 다른 글
| 백준 1712번 : 손익분기점 c언어 (0) | 2021.10.10 | 
|---|---|
| 백준 1316 : 그룹 단어 체커 c언어 (0) | 2021.10.08 | 
| 백준 2941 : 크로아티아 알파벳 c언어 (0) | 2021.10.07 | 
| 백준 2908번 : 상수 c언어 (0) | 2021.10.04 | 
| 백준 1157 : 단어공부 c언어 (0) | 2021.10.03 |