문제
https://codeforces.com/contest/1499/problem/B
걸린 시간
- 실패
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int tc;
cin >> tc;
while(tc--){
string s;
cin >> s;
int i = s.find("11");
int j = s.rfind("00");
cout << (i != -1 && j != -1 && i < j ? "NO" : "YES") << "\n";
}
return 0;
}
dp 풀이는 아직 찾지 못해서 Tutorial 을 보았는데 정말 쉬운 풀이방법이 있었다.
인접한 숫자는 지우지 못하므로 "11", "00" 두 가지 경우만 따지면 된다. 둘 중 하나만 존재할 경우 "11" 뒤에있는 0을 모두 제거, "00" 앞에있는 1을 모두 제거 가능하므로 무조건 YES 지만, 두개 다 존재할 경우는 적어도 하나씩 남기 때문에 "11" 뒤에 "00" 이 위치하는지 확인하여야 한다.
string 의 find, rfind 메소드를 이용해 "11" 은 앞에서부터, "00" 은 뒤에서부터 어디에 위치하는지를 찾아 비교하면된다.
'Codeforces' 카테고리의 다른 글
Codeforces #1496B Max and Mex (0) | 2021.03.29 |
---|---|
Codeforces #1506B Partial Replacement (0) | 2021.03.27 |
Codeforces #1485B Replace and Keep Sorted (0) | 2021.03.27 |
Codeforces Round #710 (Div. 3) A, C (0) | 2021.03.27 |
Codeforces #1476B Inflation (0) | 2021.03.24 |
댓글