Sena's garden
[백준/C언어] 1152번 단어의 개수 본문
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
https://www.acmicpc.net/problem/1152
코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main() {
char input[1000000];
int count = 0;
scanf("%[^\n]s", input);
if (strlen(input) == 1 && input[0] == ' ') {
printf("%d", count);
return 0;
}
for (int i = 1; i < strlen(input) - 1; i++) {
if (input[i] == ' ') {
count++;
}
}
printf("%d", count + 1);
return 0;
}
시도
처음 코드를 시도했을 때 scanf("%s", input)을 사용했지만, 공백을 도달한 순간 입력이 끝나 버려 문장을 입력해 옳은 결과를 얻을 수 없었다. 인터넷 검색 결과 공백을 포함한 문자열을 입력받기 위해서는 %와 s 사이에 [^\n]을 넣으면 된다는 것을 새로이 알 수 있었다.
우선 scanf("%[^\n]s", input)을 이용해 공백을 포함한 문자열을 입력한다.
입력한 문자열의 길이가 1이고 문자열의 첫 번째 글자가 공백일 때, 즉 아무 내용없이 공백만이 존재할 때 0을 출력하고 종료한다. 여기서 문자열의 길이는 위에서 <string.h>를 불러와 strlen을 이용하여 input 문자열의 길이를 구한다.
for문을 이용하여 공백 횟수를 구한다. for문에 의해 반복하며 input[i]에서 공백이 발견되면 count++을 한다.
코드 내에서 count는 공백의 수를 의미하고 문제에서 구해야 하는 것은 단어의 개수 이다. 그렇기 때문에 결과를 출력할 때에는 공백의 수 + 1을 하여 나타내야 한다.
'백준 > C언어' 카테고리의 다른 글
| [백준/C언어] 2738번 : 행렬 덧셈 (0) | 2024.08.13 |
|---|---|
| [백준/C언어] 11718번 : 그대로 출력하기 (0) | 2024.08.13 |
| [백준/C언어] 5622번 다이얼 (1) | 2024.08.11 |
| [백준/C언어] 2908번 상수 (0) | 2024.08.10 |
| [백준/C언어] 2675번 문자열 반복 (0) | 2024.08.09 |