음준희 블로그
백준 20442 : ㅋㅋ루ㅋㅋ 본문
20442번: ㅋㅋ루ㅋㅋ
어떤 문자열에서 몇 개의 문자를 지워서 부분 수열을 만들 수 있다. 예를 들어, ABC의 부분 수열은 ABC, AB, BC, AC, A, B, C와 빈 문자열이다.
www.acmicpc.net
풀이
R로만 이루어져있거나 R이 하나이상이고 양쪽에 같은수의 K가 있다면 ㅋㅋ루ㅋㅋ 문자열이다.
가운데 R을 기준으로 양쪽의 K 개수 중 작은 쪽을 기준으로 양쪽에 붙여서 만들 수 있음
투포인터를 이용하여 풀이
항상 k의 개수가 작은 쪽 부터 인덱스를 증감시킨다. k가 큰곳부터 움직인다고 해서 양쪽에 붙일 수 있는 k의 개수가 바뀌지않기 때문에 큰곳부터 움직이면 무조건 작아지기만 하므로 작은곳부터 움직여야한다.
#include<bits/stdc++.h>
#include<time.h>
#define MAX 1000000007
#define INF 2000000000
#define MOD 1000000007
using namespace std;
typedef long long ll;
typedef pair<int, int > pii;
typedef pair<long long, long long> pll;
typedef pair<double, double> pdd;
int dx[8] = { 0, -1, 0, 1, 1, 1, -1, -1 };
int dy[8] = { -1, 0, 1, 0, -1, 1, 1, -1 };
/*
int dx[2][6] = {
{1, -1, 0, 0 ,1, -1},
{1, -1, 0, 0, -1, 1}
};
int dy[2][6] = {
{0, 0, 1, -1 ,1, -1},
{0, 0, 1, -1, 1, -1}
};*/
//int dx[8] = { -1, -1, 1, 1, -2, -2, 2, 2 };
//int dy[8] = { 2, -2, 2, -2, -1, 1, -1, 1 };
void init() {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
}
ll gcd(ll a, ll b) { for (; b; a %= b, swap(a, b)); return a; }
ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }
int main() {
init();
string s; cin >> s;
char ridx = (s[0] == 'R' ? 0 : 1);
int cnt = 1;
int ans = 0;
int cntr = (s[0] == 'R' ? 1 : 0);
vector<int> v;
for (int i = 1; i < s.size(); i++) {
if (s[i] != s[i - 1]) {
v.push_back(cnt);
cnt = 1;
}
else cnt++;
if (s[i] == 'R') {
cntr++;
}
}
v.push_back(cnt);
int low = 0;
int top = v.size() - 1;
int lowk = 0;
int topk = 0;
while (low < top) {
int len = cntr + min(lowk, topk) * 2;
ans = max(ans, len);
if (lowk < topk) {
if (low % 2 == ridx) {
cntr -= v[low++];
}
else {
lowk += v[low++];
}
}
else {
if (top % 2 == ridx) {
cntr -= v[top--];
}
else {
topk += v[top--];
}
}
}
if (cntr != 0) {
ans = max(ans, cntr + min(lowk, topk) * 2);
}
cout << ans << "\n";
}'알고리즘 > 백준' 카테고리의 다른 글
| 백준 2842 : 잡배원 한상덕 (투포인터) (0) | 2023.01.06 |
|---|---|
| 백준 20188 : 등산 마니아 (트리 DP) (0) | 2023.01.04 |
| 백준 6137 : 문자열 생성 (0) | 2022.12.30 |
| 백준 2014 : 소수의 곱 c++ (0) | 2022.12.29 |
| 백준 1034 : 램프 c++ (0) | 2022.12.17 |