코딩/백준 문제 (브론즈)

[백준/1152/C언어] 문자의 개수 _ 풀이

룻밤 2023. 8. 12. 18:45

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net


풀이

본인 풀이

#include <stdio.h>
int main() {
	char s[1000000];
	int i = 0, cnt = 0;
	gets(s);			// 문자열 입력

	while (s[i] != '\0') {		// 문자열 끝까지 탐색
		// 다음 문자가 띄어쓰기인 동시에 현재 문자가 띄어쓰기가 아닐때
		if (s[i + 1] == ' ' && s[i] != ' ')		
			cnt++;		// +1
		// 다음 문자가 널문자(끝)인 동시에 현재 문자가 띄어쓰기가 아닐때
		else if (s[i + 1] == '\0' && s[i] != ' ')
			cnt++;
		i++; 
	}	// 위 조건들을 모두 충족할시에 무작정 띄어쓰기만 한다고 cnt+1 되지않음
	printf("%d\n", cnt);

	return 0;
}

scanf함수를 이용한 입력은 띄어쓰기를 포함 못한다.

그래서 gets()함수를 이용한다.

본문의 if 조건들을 모두 충족할시

' a'

'a    '

모두 1로 정상 출력됨.

 

 

gets대신 scanf("%[^\n]", s); 를 이용해도 된다.

%[^\n]의 의미는

엔터(\n)가 나오기전까지 모두 하나의 문자열로 본다는 뜻이다