백준 1152 : 단어의 개수(C, C++)
문제 링크 : 1152번: 단어의 개수 (acmicpc.net)
C언어와 C++ 두 가지 모두 해설이 준비되어 있습니다.
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
해설
C언어
scanf를 사용해 출력하려 한다면
공백을 만났을 경우 입력이 끝난다.
예를 들어 예제 1번에서는 "The"만 입력받아진다.
이 문제의 해결방법은 scanf사용 시 조건을 바꾸는 것이다.
바로 %[^\n]를 사용하는 것이다.
이걸 사용하면 개행문자 '\n'이 나오기 전까지 계속 입력받는다.
개행문자가 나오는 곳은 문장의 끝이므로 문장이 모두 입력받아진다.
#include<stdio.h>
#include<string.h>
int main(void)
{
int count=0;
char a[1000001];
scanf("%[^\n]", a);
for(int i=0; i<strlen(a); i++)
{
if(a[i]==32)
count++;
}
if(a[0]==32)
count--;
if(a[strlen(a)-1]==32)
count--;
printf("%d", count+1);
}
C++
C++은 다른 방법으로 풀었다.
문장이 끝날 때까지 문자열을 계속 입력받는 것이다.
입력을 받으면 공백 전까지 입력받아지는데
이를 계속 반복한다.
끝에 도달하면 입력이 멈출 것이다.
입력받은 횟수가 답이 된다.
#include<iostream>
using namespace std;
int main()
{
int ans=0;
string s;
while(cin>>s)
{
ans++;
}
cout<<ans;
}
혹여나 C언어로 푸시고 계시다면
C++로 갈아타시길 바랍니다.
C언어의 코드는 C++에서도 적용이 되며
C언어에는 없는 추가 기능들이 많이 존재하기 때문입니다.
이상 백준 1152 풀이를 마치겠습니다.
감사합니다.
'코딩 > 백준 알고리즘' 카테고리의 다른 글
백준 1463 : 1로 만들기(C언어,C++) (1) | 2024.02.14 |
---|---|
백준 10989 - 수 정렬하기 3(C언어,C++)(계수 정렬) (1) | 2024.02.13 |
[C/C++] 백준 2884 : 알람 시계 풀이 (1) | 2024.02.10 |
백준 9625 : BABBA(C,C++) (0) | 2023.12.31 |
백준 9655: 돌 게임(C,C++) (1) | 2023.12.30 |