[ 백준 1152번 ] 단어의 개수

2021. 12. 29. 01:05백준/단계별 문제

백준 1152번 / 단어의 개수

 

백준 1152번 - 단어의 개수

 

채점결과는 다음과 같다

  메모리 시간
1번째 방법 4916 KB 36 ms

 

문제 풀이
공백을 기준으로 단어의 개수를 찾는 문제이다
공백을 기준으로 단어가 형성되어 있으므로 규칙을 찾아보면 공백 + 1을 하면 단어의 개수가 찾아진다
공백을 개수로 단어의 개수를 찾는 알고리즘의 예외 상황으로는
- 문자열의 길이가 1이면서 공백이 하나만 있는경우
- 문자열 첫 시작에 공백으로 시작하는 경우
- 문자열 끝 부분이 공백으로 끝나는 경우
이렇게 생각하고 문제에 들어갔다

1. 문자열을 입력받고 처음 예외상황을 처리해준다 문자열의 길이가 1이고 문자열의 첫번째 인덱스가 0이면 아스키코드값(32) 단어의 개수는 0으로 출력해준다

INPUT : 
OUTPUT : 0

2. 위 예외 케이스를 처리해준 후 다음 예외 케이스를 찾아주는 반복문을 돌려준다
예외 케이스 조건대로 인덱스 첫 시작이 공백이거나 끝 부분이 0인 경우를 반복문 조건 시작을
인덱스 1부터 문자열의 길이의 -1까지로 조건을 변경을 해준다
문자열의 인덱스마다 확인을 해서 0 인지 확인을 해주면서 ( 아스키코드값 32 )
공백의 카운팅 변수인 cnt를 플러스 해준다
반복문이 종료되고 규칙대로 공백의 개수 + 1은 단어의 개수 이므로
최종 cnt 변수값에 + 1을 해서 출력을 해준다

INPUT : The Curious Case of Benjamin Button

s = INPUT

s[1] = h
s[2] = e
s[3] = 공백, cnt + 1
.
.
s[11] = 공백, cnt + 1
s[16] = 공백, cnt + 1
s[19] = 공백, cnt + 1
s[28] = 공백, cnt + 1

word_count = cnt + 1

OUTPUT =  6

 

코드
#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

int main() {
	string s;
	unsigned int i;
	int cnt = 0;

	getline(cin, s);

	if (s.length() == 1) { 
		if ( (int)s[0] == 32 ) {
			cout << 0;
			return 0;
		}
	} // 예외처리 공백하나만 주어졌을때

	for ( i = 1; i < s.length() - 1; i++ ) {
		if ( s[i] == 32 ) cnt++;
	}
	cout << cnt + 1;
}

'백준 > 단계별 문제' 카테고리의 다른 글

[ 백준 2908번 ] 상수  (0) 2022.01.03
[ 백준 1157번 ] 단어 공부  (0) 2021.12.23
[ 백준 10809번 ] 문자열 반복  (0) 2021.12.18
[ 백준 10809번 ] 알파벳 찾기  (0) 2021.12.13
[ 백준 11720번 ] 숫자의 합  (0) 2021.12.09