728x90
반응형
문제
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 128 MB | 302070 | 95671 | 76555 | 32.413% |
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h> // strlen (문자열 길이 체크용)
#include <ctype.h> // isspace (공백문자 체크용)
char* trim(char*);
int main() {
char line[1000000];
// 입력
scanf("%[^\n]", line);
// 문자열 앞, 뒤 공백 제거
char *line_result = trim(line);
// trim을 하면 공백을 제거하는데 문자열 길이가 0이면 0 반환
if (strlen(line_result) == 0) {
printf("%d\n", 0);
return 0;
}
else {
// 단어 개수를 저장할 변수
int answer = 0;
// 문자열 개수만큼 반복
for (int i = 0; i < strlen(line_result); i++) {
// 문자열에서 현재 보고 있는 문자가 공백이면 +1
if (line_result[i] == ' ') {
answer++;
}
}
// 공백의 개수를 세었는데 출력은 단어의 개수를 요구하니 +1
printf("%d\n", answer + 1);
return 0;
}
}
char* trim(char* str) {
// 문자열의 앞쪽 공백 제거
while (isspace(*str)) {
str++;
}
// 문자열의 뒤쪽 공백 제거
int len = strlen(str);
while (len > 0 && isspace(str[len - 1])) {
str[--len] = '\0';
}
return str;
}
해결
앞, 뒤 공백을 제거하고 문장의 중간에 있는 공백의 개수를 센다
참고
링크
728x90
반응형
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 11720번 문제, 파이썬3] 숫자의 합 (0) | 2023.05.04 |
---|---|
[백준 1181번 문제, python] 단어 정렬 (0) | 2023.04.07 |
[백준 1969번 문제, Python3] DNA (0) | 2023.03.29 |
[백준 1485번 문제, Python3] 정사각형 (0) | 2023.03.25 |
[백준 1051번 문제, JAVA] 숫자 정사각형 (0) | 2023.03.14 |