문제링크: 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.느낀점
- 다른 풀이로도 풀어볼 필요가 있다.
'백준 문제 정리' 카테고리의 다른 글
백준 2439 별 찍기 - 2 (C언어) (0) | 2023.09.16 |
---|---|
백준 10989 수 정렬하기 3 (C언어) (0) | 2023.09.10 |
백준 10809 알파벳 찾기 (C 언어) (0) | 2023.09.02 |
백준 11718번 그대로 출력하기 (C언어) (0) | 2023.09.02 |
백준 2743 단어 길이 재기 (C언어) (0) | 2023.09.02 |