[ 백준 1152번 ] 단어의 개수
2021. 12. 29. 01:05ㆍ백준/단계별 문제
백준 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 |