알고리즘/백준
[백준] 1152번 단어의 개수 (C++) *
2023. 12. 21. 00:42반응형
문제링크
https://www.acmicpc.net/problem/1152
소스코드 (C++)
#include<iostream>
#include<string>
using namespace std;
int main(void) {
int result = 0;
string str;
getline(cin, str);
// 문자의 갯수를 세기, 조건1: 현재 문자고, 뒤가 공백인 경우
int len = str.length();
for (int i = 0; i < len - 1; i++) {
if (str.at(i) != ' ' && str.at(i + 1) == ' ') {
result++;
}
}
// 마지막이 문자인 경우 ++ (무조건 ++임. 왜냐면, 그 앞이 문자가 있어도 더해야하고, 없어도 더해야하기 떄문)
if (str.at(len - 1) != ' ') {
result++;
}
cout << result;
return 0;
}
설명
- 어떻게 풀건지 전략을 짜는게 중요.
- 어떻게 단어를 구분지을까?
-> 현재 위치가 문자이고, 뒤가 공백인 경우 현재 위치의 문자는 단어에 속한 단어이다. 그러기에 단어 카운트 증가.
-> 마지막 번지가 문자라면 당연히 그것은 단어이기에, 단어 카운트 증가.
- 새로알게된것: 공백 포함에서 입력받고 싶으면 getline(cin, <string 변수>)로 입력받으면 된다.
다른 풀이법
그냥 공백의 갯수를 세서 풀이하는 방법도 있다.
#include <stdio.h>
#include <string.h>
char s[1000001];
int main() {
int result = 1;
scanf("%[^\n]", s);
if (strlen(s) == 1 && s[0] == ' ') {
printf("0");
return 0;
}
for (int i = 1; i < strlen(s) - 1; i++) {
if (s[i] == ' ') result++;
}
printf("%d", result);
return 0;
}
참고: scanf의 %[^\n]는 엔터를 만날때 까지 읽기에, 공백 포함에서 읽을 수 있다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 24060번 알고리즘 수업 - 병합 정렬 1 (C++) ** (0) | 2023.12.26 |
---|---|
[백준] 10809번 알파벳 찾기 (C++) * (0) | 2023.12.21 |
[프로그래머스] LV1.정렬 K번째수 풀이 소스코드 (0) | 2022.01.20 |