백준 1152 : 단어의 개수(C, C++)
문제 링크 : 1152번: 단어의 개수 (acmicpc.net)
1152번: 단어의 개수
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열
www.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 |