백준 알고리즘 1152번

단어의 개수

문제풀이
1. 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다 - 길이 1000001
2. 문자열을 검사하면서 만약에 띄어쓰기를 만나면? wordcnt 변수 ++

라고 간단한 줄 알았으나
(두가지를 더 생각했었어야하는 문제였다.)
두가지 케이스는

    1. 첫번째에 공백이 들어올 경우
    1. 가장 마지막에 공백이 들어오거나 공백 두개가 연달아 들어오는 경우
      그 부분을 예외처리했다
  1. 이렇게 해도 문제가 해결되지 않았다. 이유를 찾아보니 fgets 등등 여러가지 다른 입력함수를 사용하니 해결되는 거 같았지만 먼 개소린지 모르겠어서 scanf 에서 사용할 수 있는 법을 찾았다.

    (절 이해시켜주셔서 감사합니다..)
  • 이렇기 때문에 scanf("%[^\n]", str); 라고 입력을 받았다 ( 익숙해지려면 꽤 걸리겠군 )
    42서울 때매 scanf, printf에서 멀어지고 write 함수로만 구현해봐서 생각해보지 못한 부분이었다!
  1. wordcnt 출력
#include <stdio.h>
#include<string.h>

int main(void)
{
  char str[1000001];
  int wordcnt = 1;
  scanf ("%[^\n]", str); //맘에 안 들지만 사용해야함
  
   for(int i =0; i< strlen(str); i++)
   {
    if (str[i] == ' ')
    wordcnt++;
  }
  if(str[0] == ' ')
  wordcnt--; //첫번째 예외 - 첫번째 단어가 공백일 때 wordcnt 하나 감소
  if(str[strlen(str)-1] == ' ')
  wordcnt--; //두번째 예외 - 마지막 단어가 공백일 때 wordcnt 하나 감소
  
  printf("%d", wordcnt);
  return 0;
}

좋은 웹페이지 즐겨찾기