-
JUNGOL 실력키우기 문자열 - 문자열 찾기 | 단어 세기보관함 2020. 2. 10. 10:37
기초 다지기에서 배운 내용을 응용하여 문제를 해결해야 하는 실력 키우기입니다.
실력 키우기는 비슷한 문제 유형별로 묶어서 풀어보겠습니다.
이번 포스팅에서는 문자열의 단어 찾기 시리즈를 풀어보겠습니다.
2514 : 문자열 찾기
C++의 string 클래스에는 find라는 좋은 메소드가 포함되어 있는데 이 메소드의 오버로드를 살펴보면 문자열의 위치를 찾고 어느 인덱스 부터 찾을지를 결정할 수 있습니다.
이 문제는 이 메소드를 이용하여 쉽게 해결이 가능합니다.
#include <iostream> #include <string> using namespace std; int main(void) { string str; cin >> str; string targets[2]{ "KOI", "IOI" }; for (int i = 0; i < 2; ++i) { int index{ 0 }; int cnt{ 0 }; while (true) { index = str.find(targets[i], index); if (index == -1) break; index++; // 다음에 찾을 때 이미 찾은거 포함 안하기 cnt++; } cout << cnt << endl; } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=1775&sca=2050
JUNGOL | 문자열 찾기 > 문제은행
출력은 2줄이며, 첫 번째 줄에는 KOI의 개수, 두 번째 줄에는 IOI의 개수를 각각 출력하라.
www.jungol.co.kr
1516 : 단어 세기
이 문제는 map<string, int>를 이용하면 쉽게 해결이 가능합니다.
가령 word라는 단어가 있다면 map[word]++; 인 경우 word의 개수가 1 증가하게 됩니다.
#include <iostream> #include <sstream> #include <map> #include <string> using namespace std; int main(void) { while (true) { string str; getline(cin, str); if (str == "END") break; map<string, int> wordsCount; string word; for (stringstream ss(str); ss >> word; ) { wordsCount[word]++; } for (map<string, int>::const_iterator it{ wordsCount.cbegin() }; it != wordsCount.cend(); it++) { cout << (*it).first << " : " << (*it).second << endl; } } }
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=2050
JUNGOL | 단어 세기 > 문제은행
임의의 문장을 입력받아 각 단어별로 나눈 후에 단어들의 중복되는 개수를 구하는 프로그램을 작성하시오. <처리조건> (1) 입력된 스트링은 글자의 제한은 없다. 즉 공백이나 ', ' 등도 입력으로 들어 올 수 있다. (2) 입력된 문장에서 각 단어사이의 구분은 공백으로 한다. (3) 단어에는 공백을 제외한 단어들만이 포함된다. 임의의 문장을 입력받는다.(문장의 길이는 200 이하) 하나의 결과가 나온 후에도 계속 새로운 입력을 받다가, "END"가 입력되면
www.jungol.co.kr