1. 문제 상세
https://www.acmicpc.net/problem/1152
2. 문제 접근
공백을 포함한 문자열을 입력받고 문자열에 단어가 몇 개 있는지 확인하자. 단어 사이의 공백은 하나이다.
공백을 포함하여 문자열을 입력받기 위해서는 기존의 cin 대신 getline 을 사용한다.
getline(cin, 문자열) 형식으로 문자열에 공백을 포함한 문자열을 입력받아 저장한다.
문자열에서 단어의 갯수는 단어 사이의 공백 개수 + 1개가 된다.
단어가 하나인 경우(공백 X)나 위에서 말한 것 처럼 단어 갯수가 단어 사이 공백 갯수 + 1개 이므로
단어 갯수를 카운트 할 변수의 기본값을 1로 초기화하자.
조건에서 맨 앞이나 맨 뒤에 공백이 포함 될 수 있다고 했으니,
문자열의 공백 개수를 체크하고 맨 앞이나 맨 뒤의 공백을 확인하여 해당 갯수만큼 개수를 빼자.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int n = 1;
string s;
getline(cin, s);
for(int i = 0; i < s.length(); i++) {
if(s[i] == ' ') n++;
}
if(s[0] == ' ') n--;
if(s[s.length() - 1] == ' ') n--;
cout << n;
}
정수형 변수 n 을 선언하고 1로 초기화한다.문자열 객체 s 를 생성.
getline() 을 사용하여 문자열을 입력받아 s 에 저장한다.
for문으로 i 가 0부터 문자열 s 의 길이보다 작을 때, 1씩 더하며 반복한다.반복문 안에서는 조건문으로 s 의 i 번 인덱스의 문자가 ' ', 공백 문자이면 n 에 1을 더한다.
반복문이 끝나면 조건문으로 s 의 0 번 인덱스가 공백일때 n 에서 1을 뺀다.그리고 s.length() - 1 번 인덱스, 즉 문자열의 마지막 문자가 공백인 경우 n 에서 1을 뺀다.
4. 성능 확인
5. 마무리
생각한 것 보다 복잡한 느낌이었다..
처음에는 공백을 체크하는 방법이 아니라 단어의 처음과 끝을 확인하여 카운트 하는 방법을 생각해봤는데
아무래도 성능 면에서 속도가 조금 떨어지는 것 같아 공백 체크 방식으로 다시 풀어보았다.
'백준 - 단계별로 풀어보기 > 문자열' 카테고리의 다른 글
[백준] 5622번 : 다이얼 | C++ (0) | 2023.09.25 |
---|---|
[백준] 2908번 : 상수 | C++ (0) | 2023.09.25 |
[백준] 2675번 : 문자열 반복 | C++ (0) | 2023.09.25 |
[백준] 10809번 : 알파벳 찾기 | C++ (0) | 2023.09.25 |
[백준] 11720번 : 숫자의 합 | C++ (0) | 2023.09.25 |