Coding Feature.

백준) 1152번: 단어의 개수 in C 본문

코딩테스트/백준 solved.ac

백준) 1152번: 단어의 개수 in C

codingfeature 2023. 7. 29. 17:44

Made with Stable Diffusion

Problem

 

1152번: 단어의 개수

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

www.acmicpc.net

 

Solution

 

위 문제는 특히 C언어의 경우, 먼저 문자열 전체를 입력받고 공백의 개수를 세거나, 문자열 앞 뒤에 공백이 포함된 경우를 나누는 등 굉장히 복잡한 방향으로 풀이가 흘러갈 위험성이 있다.

 

만약 위 문제와 같이 백준에서 어떤 원소들을 원소 개수 N 없이 입력받고 싶다면 while loop와 scanf의 특성, 특히 리턴값을 잘 이용하면 된다. 알고리즘 풀이보다는 scanf 개념 숙지를 테스팅하는 문제.

 

원래 scanf의 반환값은 integer 형식이며 입력 항목의 개수이다.

예를 들어 int ret = scanf("%d %d %d", &a, &b, &c) 에서

ret 값은 3이 된다.

 

만약 입력 실패가 일어난다면 EOF(End Of File)을 반환한다.

이를 이용해 따로 입력받을 원소 개수를 받을 필요없이 while loop으로 구현할 수 있다.

 

scanf 함수는 문자열이 아니라 공백으로 구분된 한 단어씩 입력받으므로, while 조건문에 scanf를 통해 한 단어씩 입력받고 return 값이 EOF가 아닌 동안 loop을 반복하면서 카운팅하면 쉽게 해답을 구할 수 있다.

 

while(scanf("%s", str)!=EOF)
    count++;

또는 scanf가 항상 입력 항목 개수를 하나씩 입력받는 것을 이용해 다음과 같이 작성해도 된다.

while(scanf("%s", str)==1)
    count++;

 

Code

#include <stdio.h>

int main(){
	int count = 0;
	char str[1000001];
	
	while(scanf("%s", str)!=EOF)
		count++;
		
	printf("%d", count);
	return 0;
}