반응형
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;
}
끝.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준 알고리즘] 2193번 이친수 (0) | 2020.08.06 |
---|---|
[백준 알고리즘] 1260번 DFS와 BFS (0) | 2020.08.05 |
[백준 알고리즘] 1149번 : RGP거리 (0) | 2020.08.05 |
[백준 알고리즘] 1065번 한수 (0) | 2020.08.04 |
[백준 알고리즘] 1037번 약수 (0) | 2020.08.01 |
댓글