본문 바로가기
코딩테스트!(프로그래머스 & 백준)/백준 - C++

백준 1152번 단어의 개수 and getline()함수!

by Lee_story_.. 2022. 6. 23.
728x90

1152번!

 

1152번: 단어의 개수

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

www.acmicpc.net

단어의 개수

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 241093 72670 57819 31.374%

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

입력

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

 


The Curious Case of Benjamin Button >>> 6

 

 

 

해결방법

1. 문자를 받는다!

2. 문자를 공백을 세어준다!

3. 문자의 개수 =  공백의 개수 +1! 

 

 

단순히 글자수를 세는 문제였습니다!

 

하지만 여기서 문제가 생겼습니다...

 

기존 cin>> str  사용시 스페이스바(공백)를 기준으로 다음 str으로 인식해버려서

공백이 나온 순간 그 다음 내용은 저장을 못하더라구요.....

 

여기서 사용한 방법이 getline()함수!

공백을 포함하여 문자열을 입력받을수 있게 도와주는 함수입니다

 

getline(cin, str);

 

여러 입력함수가 있으니 아래 링크로!

 

 

 

C++ 입력 함수 - cin, cin.get(), getline() - kwon | kwon's Blog

cin 에 포함되어 있다. 표준 입력 버퍼에서 개행 문자를 제외한 값을 가져온다. 공백이나 개행 입력 시 공백 이전까지의 값만 결과로 받아들인다. 개행 문자를 입력 버퍼에 남겨둔다. 1234567int n;cin

kyu9341.github.io

 

*all

#include <iostream>
#include <string>
using namespace std;

int main() {
	string str;
	getline(cin, str);
	
	int num = 1;
	for (int i = 0; i < str.length(); i++) {
		if (str[i] == ' ')
			num++;
	}

	if (str[0] == ' ') 
		num--;
	if (str[str.length() - 1] == ' ') 
		num--;
	
	cout<<num<<endl;
}

'코딩테스트!(프로그래머스 & 백준) > 백준 - C++' 카테고리의 다른 글

백준 2231 분해합 (C++)  (0) 2022.09.06
백준 2798 블랙잭 (C++)  (0) 2022.09.06
백준 11729 하노이탑  (0) 2022.09.05
백준 5622번 다이얼  (0) 2022.06.23
백준 - 단어 공부  (0) 2022.06.22

댓글