어흥
[백준 15831] 준표의 조약돌 (C++) 본문
728x90
반응형
문제 링크: www.acmicpc.net/problem/15831
1. 주의할 점
- 두 포인터를 사용한다
2. 구현
- 0번째 돌 추가 이후 While문을 수행한다
- L=R=Result=0으로 초기화하고 시작한다
- 조건에 맞게 산책이 가능할때, Result값과 비교하여 갱신한다
- 검정색 조약돌의 수가 기준치보다 적거나 같을 때, R을 오른쪽으로 한칸 더 움직인다 → incR() 함수 수행. 이때, False를 반환할 경우 While문을 종료한다
- 검정색 조약돌의 수가 기준치보다 많을 때, L을 왼쪽으로 한칸 움직인다 → incL() 함수 수행. 이때, False를 반환할 경우 R을 증가시키기 위해 incR() 함수를 수행한다. 이때도 False를 반환하면 While문을 종료한다
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int num,black,white,b=0,w=0,result=0,l=0,r=0,len;
char c;
string str;
bool incR(){
if(r==len-1) return false;
c = str[++r];
if(c=='W') w++;
else b++;
return true;
}
bool incL(){
if(l==r) return false;
c = str[l++];
if(c=='W') w--;
else b--;
return true;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
cin>>num>>black>>white;
cin>>str;
len = str.size();
if(str[0]=='W') w++;
else b++;
while(r<len){
if(w>=white && b<=black){
result = max(result,r-l+1);
}
if(black<b){
if(!incL()) //l==r -> r증가 or l증가
if(!incR()) break;
}
else{ //b 더 추가 가능 -> r증가
if(!incR()) break;
}
}
cout<<result;
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2243] 사탕상자 (C++) (0) | 2021.05.12 |
---|---|
[백준 2042] 구간 합 구하기 (C++) (0) | 2021.05.12 |
[백준 16472] 고냥이 (C++) (0) | 2021.04.29 |
[백준 14746] Closest Pair (C++) (0) | 2021.04.28 |
[백준 2531] 회전 초밥 (C++) (0) | 2021.04.27 |
Comments