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

[백준 알고리즘] 1152번 단어의 개수

by 에르주 2020. 8. 5.
반응형

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

 

1152번: 단어의 개수

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

www.acmicpc.net

입력

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

출력

첫째 줄에 단어의 개수를 출력한다.

 

풀이

해당 문제는 Java로 풀 시에는 substring을 통해 배열 변환 후 배열의 갯수를 리턴하면 된다. 하지만 내가 알고리즘 풀 때 사용하는 C++는 substring 같은 메소드가 없다.

 

strtok라는 메소드가 있긴하지만 (#include <string.h> or <cstring> 필요) return 값은 char의 포인터 변수이다.

 

첫번째 input_str을 strtok 적용 한 것은 첫 문자열을 " "로 split 했을 때를 나타내며 줄이 끝날 때 까지 진행해야 하므로

반복문을 통해 NULL값이 나올 때까지 돌려준다.

#define _CRT_SECURE_NO_WARNINGS

#include<cstdio>
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include <sstream>

#define N 1000000

using namespace std;


int main()
{

	int count = 0;
	char *input_str = new char[N];

	scanf("%[^\n]", input_str); //  \n가 나올 때 까지 문자열 그대로 받는다.

	char *analysis_str = strtok(input_str, " "); //문자열을 조각한다. 자를 문자열이 없으면  NULL값을 반환한다.




	while (analysis_str != NULL) { //자른 문자열이 나오지 않을 때 까지.

	
		
		count++;

		analysis_str = strtok(NULL, " "); // 그 다음 " "으로 나누기


	}

	cout << count << endl;


	

}

 

끝.

반응형

댓글