본문 바로가기

백준 문제 정리

백준 1152 단어의 개수 (C언어)

문제링크: https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

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

www.acmicpc.net

1. 알아야할 부분

  • strlen 함수 사용
  • scanf 함수를 사용한 문자열 입력 방법
  • 입력된 배열길이가 1일때, 코드 중간에 return 0 사용하여 함수 종 료
  • for문의 시작과 끝을 조작하여 처음 끝 공백 count 제외시키기

 

2. 코드구현

#include <stdio.h>
#include <string.h>

int main(void) {
  char arr[1000001];
  int wordcnt=0;

  scanf("%[^\n]",arr);

  int len = strlen(arr); 
	// strlen 함수는 길이에 널문자 포함 안함

  if(len == 1 && arr[0]==' ') // 길이가 1이고 공백일때를 의미
  {
    printf("%d",wordcnt);
    return 0;
  }
    
  for(int i=1 ; i<len-1 ; i++) 
  {
    if(arr[i]==' ') wordcnt++;
  }
  

  printf("%d",wordcnt+1); 
	// 공백 +1 해줘야 단어의 갯수가 나옴

  
  return 0;
}
  • scanf("%[^\n]",arr); 에 대한 설명(출처: chat GPT)
    • 공백포함 문자열 입력하는 함수
    • %[ : 문자열 입력의 시작을 나타낸다.
    • ^ : 대괄호 안에서 사용되면 "제외하고"를 나타냄. 즉, 이 부분은 개행 문자 (\n)을 제외한 모든 문자를 입력으로 받겠다는 의미임
    • \n : 개행 문자를 나타냄. 이것은 입력 문자열을 읽을 때 문자열의 끝을 나타냄
  • for문의 i가 0이아닌 1로 시작하고 끝이 len이아닌 len-1로 시작하는 이유
    • 만약 0으로 시작하면 첫 공백도 wordcnt가 되기 때문에
    • 공백을 기준으로 문자를 파악하는 상황에서 첫번째 공백과 가장 마지막 공백은 wordcnt 할 필요가 없음
    • 그러므로 i가 1부터 시작하고 끝의 index 범위가 len-1보다 작아야
    • 끝을 len-1 함으로 → 마지막 공백 wordcnt 대상에서 제외함! 시작을 1로 함으로 → 첫 wordcnt 대상 제외함!

 

3.느낀점

  • 다른 풀이로도 풀어볼 필요가 있다.