#문제
1152번: 단어의 개수
https://www.acmicpc.net/problem/1152
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.acmicpc.net
#접근방법
공백을 포함한 문자열을 받고 단어의 개수를 출력하면 된다.
1. char 자료형으로 공백을 포함한 문자열을 받는다.
2. 단어는 공백 한 개로 구분이 되므로 이를 이용하여 단어의 개수를 출력한다.
#풀이
#include <stdio.h>
#include <string.h>
char a[1000005];
int main(){
int ans = 0;
scanf("%[^\n]s",a);
if(a[0]!=' ') ans++;
for(int i=1;i<strlen(a);i++)
if(a[i-1]==' ' && a[i]!=' ') ans++;
printf("%d",ans);
return 0;
}
문자열의 길이는 1,000,000을 넘지 않으므로 문자 자료형 char 배열을 넉넉히 1,000,005만큼 크기를 잡아준다.
딱 1,000,000을 잡지 않은 이유는 int 같은 정수형 자료형과는 달리 마지막 배열에 널문자 '\0'가 들어가므로 1,000,001이상으로 잡아줘야 한다.
scanf에서 %s로 문자열을 입력받으면 공백을 받지못하므로 %[^\n]s로 배열을 입력 받았다.
[^\n]라는 뜻은 입력값에서 개행('\0')을 받기 전까지 계속 입력을 받는다는 뜻이다.
단어 사이마다 공백이 있으므로 공백의 개수 + 1이 단어의 개수라고 계산하려 했지만,
맨 앞과 맨 뒤에 공백이 있을 수도 있으므로 공백과 공백이 아닌 것이 연속해서 나온다면 단어의 개수를 카운트해주었다.
예외처리로 맨 앞에 있는 문자가 공백이 아니면 단어이므로 개수를 추가시켜줬다.
#성능
#정리
%[^\n]s로 공백을 포함하는 문자열을 입력 받을 수 있다.
strlen(a)로 배열의 크기를 알 수 있다. 이 함수를 쓰려면 #include <string.h> 헤더파일을 작성해줘야 한다.
char 자료형 배열의 맨 마지막은 널문자 '\0'가 들어있으므로 받을 크기 + 1 이상만큼 크기를 잡아야 한다.
단어의 개수를 셀 때 예외처리를 했는지 확인하기.
정도로 정리할 수 있겠다.
'하루 한 문제' 카테고리의 다른 글
[백준] 1330번 : 두 수 비교하기 [C/C++] (0) | 2021.11.18 |
---|---|
[백준] 1157번 : 단어 공부 [C/C++] (6) | 2021.11.17 |
[백준] 1008번 : A/B [C/C++] (0) | 2021.11.15 |
[백준] 1001번 : A-B [C/C++] (0) | 2021.11.14 |
[백준] 1000번 : A+B [C/C++] (2) | 2021.11.13 |