#include <stdio.h>
#include <string.h>
int main(void){
char arr[1000000];
int i,cnt=0,len;
scanf("%[^\n]",arr);
len = strlen(arr);
if (len == 1){ // 만약 공백 하나만 입력되었을때를 위한 if 문 처리를 해주어서 0이 출력되게 함
if( arr[i] == ' '){
printf("0\n");
return 0;
}
}
for(i = 1; i<len-1; i++){ // 공백의 갯수로 단어의 갯수를 체크 하기 때문에 처음과 끝에 공백이 들어올 경우를 위해 int를 1 로 지정하고 끝나는 지점은 -1 을 해주어 처음과 끝의 공백을 제거해주었다.
if( arr[i] == ' '){
cnt++;
}
}
printf("%d", cnt+1); // 공백의 갯수로 단어의 갯수를 체크했기 때문에 +1로 출력해주었다. ( ex - 단어가 4개가 들어가려면 공백이 세개 )
return 0;
}
도저히 안 풀려서 그냥 남의 코드 빼겼다.
입력한 문자의 길이를 알아내는게 힘들어서 찾아보니 간단하게 구할 수 있는 방법이 있더라.
len = strlen(arr)
arr배열의 길이를 바로 구해서 len이라는 변수에 값을 넣어주는 기능을 한다.
<string.h> 헤더가 필요하다.
scanf("%[^\n]",arr);
이것도 처음보는 방식인데 맨 마지막으로 엔터를 입력할때 까지 계속 문자열을 받을 수 있다고 한다.(엔터 전에 공백 입력된 것도 포함)
if (len == 1){
if( arr[i] == ' '){
printf("0\n");
return 0;
}
}
문자를 한 개 입력했을 때, 공백이라면 0을 출력하는 부분. (입력된 단어가 없으므로)
for(i = 1; i<len-1; i++){
if( arr[i] == ' '){
cnt++;
}
}
조건에 문자열 앞 뒤에는 공백이 포함된 채로 입력될 수 있다고 했으니 앞 뒤를 제외시키고 반복시킬 수 있도록 만든다.
보통 i=0; i<변수; i++ 라고 하면 전 범위가 다 포함이 되니까 i=1; i<변수-1; i++ 이면 양 끝이 하나씩 총 두 칸의 범위가 줄어들게 된다.
범위 내에서 공백이 포함되면 cnt라는 변수의 값을 1씩 올리고 마지막에 반복문에서 나와서 cnt+1의 값을 출력한다. (단어 n+1개에 공백은 n개이므로)
새로운 방법을 알았으니 참 다행이다. 알고리즘 풀이에 필요한 문법들을 좀 더 알아둘 필요가 있겠다.