본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 1152번 단어의 개수 - [c/c++] 풀이

by 미니상미니 2022. 10. 18.
반응형

https://www.acmicpc.net/problem/1152

 

1152번: 단어의 개수

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열

www.acmicpc.net

 

 

 

 


  • 문제

단계별로 풀어보기 - 문자열 - [6단계] 1152번


해설

문자열의 양끝의 공백을 제외한 (공백의 개수 + 1) = (단어의 개수)이므로 정답을 저장할 변수 res을 1로 초기화한 후

공백이 있을 때마다 res를 1씩 증가시킨다.
단 문자열의 길이가 1이고 공백일 경우를 고려하여 0을 출력한다.

 

c - 공백을 포함한 문자열 입력받는 방법 : scanf("%[^\n]", 변수);

 

c++ - 공백을 포함한 문자열 입력 받는 방법 : string 헤더 파일에 포함되어 있는 getline함수를 통해

getline(cin, 변수); 로 공백을 포함한 문자열을 입력받을 수 있다.

 

코드

c

#include <stdio.h>
#include <string.h>

char s[1000001];

int main() {


	int res = 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] == ' ') res++;
	}

	printf("%d", res);

	return 0;
}

 

c++

#include <iostream>
#include <string>

using namespace std;

int main() {

	string s;
	int res = 1;

	getline(cin, s);

	if (s.length() == 1 && s[0] == ' ') {
		cout << 0;
		return 0;
	}

	for (int i = 1; i < s.length() - 1; i++) {
		if (s[i] == ' ') res++;
	}

	cout << res;

	return 0;
}

 

 

 

 

 

 

반응형

댓글