백준 1152번 단어의 개수

#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개이므로)

느낀점

새로운 방법을 알았으니 참 다행이다. 알고리즘 풀이에 필요한 문법들을 좀 더 알아둘 필요가 있겠다.

좋은 웹페이지 즐겨찾기