주어진 문자열에서 연속 3개의 문자가 IOI 이거나 KOI인 문자열이 각각 몇 개 있는지 찾는 프로그램을 작성하라.
문자열은 알파벳의 대문자로만 이루어진다. 예를 들어 "KOIOIOI"라는 문자열은 KOI 1개 , IOI 2개가 포함되어있다.
입력은 한 줄이며 10,000자 이하의 알파벳 대문자로 구성된다.
출력은 2줄이며, 첫 번째 줄에는 KOI의 개수, 두 번째 줄에는 IOI의 개수를 각각 출력하라.
[Copy]
KOIOIOI | [Copy]
1
2 |
[Copy]
KORKDIOIDXHKOIOIOIOPKOI | [Copy]
2
3 |
문제만 보고 좀 어려울라나 생각했는데 막상 풀려고 보니 그리 어렵지 않게 해결이 가능했습니다.
문자열 길이가 짧아서 실행시간 초과되는 문제를 생각할 필요가 없어서 쉬웠던 것 같네요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> #include <string> using namespace std; int main(void) { string words; int kCounter = 0; int iCounter = 0; cin >> words; // 처음부터 끝까지 돌면서 // K 혹은 I 와 만날경우 그 다음 두 글자가 OI 인 경우 카운트 증가 // 아닌 경우엔 그냥 무시한다. for (int i = 0; i < words.size() - 2; ++i) { if (words[i + 1] != 'O' || words[i + 2] != 'I') continue; if (words[i] == 'K') kCounter++; if (words[i] == 'I') iCounter++; } cout << kCounter << endl; cout << iCounter << endl; } | cs |
JUNGOL) 문제은행) 실력키우기) 문자열 찾기