[백준] 1152번 단어의 개수 C++ 문제 풀이 문자열
2019. 10. 4. 13:03ㆍ알고리즘/백준
728x90
반응형
문제
영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력 1
The Curious Case of Benjamin Button
예제 출력 1
6
예제 입력 2
Mazatneunde Wae Teullyeoyo
예제 출력 2
3
예제 입력 3
Teullinika Teullyeotzi
예제 출력 3
2
문제 풀이
#include<stdio.h>
#include<stdbool.h>
int main() {
char charArr[1000002];
bool isWord = false;
int i = 0, count = 0;
fgets(charArr, sizeof(charArr), stdin);
while(1){
if (charArr[i] == '\n')
break;
if (!isWord && charArr[i] != ' '){
isWord = !isWord;
count++;
}
if (isWord && charArr[i] == ' ')
isWord = !isWord;
i++;
}
printf("%d", count);
return 0;
}
입력이 끝나면 종료를 해야 하니 \n을 만나면 반복문을 종료하도록 하였습니다.
charArr[i]가 공백이 아니면 단어이므로 false인 isWord를 true로 바꿔주고 단어를 만났으니 count 값을 증가시킵니다.
이렇게 하면 다음에 문자가 연속되더라도 isWord가 true이므로 조건문을 타지 않아 count 값을 증가시키지 않습니다.
charArr[i]가 공백이면 입력 첫 부분에 공백이거나 단어와 단어 사이의 공백입니다.
입력 첫 부분의 공백이더라도 isWord가 false이기 때문에 조건이 거짓으로 됩니다.
출처 : https://www.acmicpc.net/problem/1152
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 5622번 다이얼 C++ 문제 풀이 문자열 (2) | 2019.10.12 |
---|---|
[백준] 2908번 상수 C++ 문제 풀이 문자열 (0) | 2019.10.09 |
[백준] 1157번 단어 공부 C++ 문제 풀이 문자열 (0) | 2019.10.01 |
[백준] 2675번 문자열 반복 C++ 문제 풀이 문자열 (0) | 2019.09.30 |
[백준] 10809번 알파벳 찾기 C++ 문제 풀이 문자열 (0) | 2019.09.26 |