일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
27 | 28 | 29 | 30 | 31 |
Tags
- 깊이 우선 탐색
- js
- 옵셔널 체이닝 연산자
- 1620
- 숫자 문자열과 영단어
- 다이내믹 프로그래밍
- 4796
- 없는 숫자 더하기
- 구간 합 구하기 4
- javascript
- 브루트포스 알고리즘
- 18111
- 정수 삼각형
- 소수 체크
- BOJ
- 프로그래머스
- Hasing
- 5525
- 위클리 챌린지
- mermaid js
- 주식 가격
- 이분탐색
- 2018 KAKAO BLIND RECRUITMENT
- n^2 배열 자르기
- C++
- codeSyntaxHighlight
- colorSyntax
- Git Convention
- react
- 10162
Archives
- Today
- Total
개발하는 kim-hasa
[c++][BOJ][5525] IOIOI 본문
https://www.acmicpc.net/problem/5525
5525번: IOIOI
N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇
www.acmicpc.net
특정 문자열을 입력받고 , 문자열 안에 특정 IOI...OI가 몇개 있는지 구하는 문제입니다.
기본 아이디어는 k길이의 IOI문자열 안에 n 길이의 IOI 문자열의 개수는 (단 , k >= n )
1 + (k - n)/2 개 들어갈 수 있습니다.
문자열을 입력받고 , IOI 문자열의 길이를 구합니다.
문자열의 길이가 기본 문자열의 길이보다 길다면 , 벡터에 저장합니다.
그 이후 벡터에서 제거하면서 나올 수 있는 문자열의 개수를 구합니다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
int n;
cin >> n;
int basic = ( 2 * n ) + 1;
int m;
cin >> m;
string s;
cin >> s;
vector<int> arr;
int count = 0;
bool toggle = false;
for(int i=0; i<m; i++){
if(s[i] == 'I'){
if(toggle == false){
toggle = true;
count++;
}
else if(toggle == true && s[i-1] == 'O'){
count++;
}
else {
if(count >= basic){
arr.push_back(count);
}
count = 1;
}
}
else {
if(toggle == true && s[i+1] == 'I'){
count++;
}
else {
if(count >= basic){
arr.push_back(count);
}
toggle = false;
count = 0;
}
}
}
int ans = 0;
for(int i=0; i<arr.size(); i++){
int len = arr[i];
ans++;
len -= basic;
ans += len/2;
}
cout << ans;
}
'Algorithm > BOJ' 카테고리의 다른 글
[c++][BOJ][2630] 색종이 만들기 (0) | 2022.03.02 |
---|---|
[c++][BOJ][1620] 나는야 포켓몬 마스터 이다솜 (0) | 2022.03.01 |
[c++][BOJ][1541] 잃어버린 괄호 (0) | 2022.03.01 |
[c++][BOJ][2606] 바이러스 (0) | 2022.03.01 |
[c++][BOJ][2579] 계단 오르기 (0) | 2022.03.01 |