문제 해석
문제 풀이
문제를 조금만 살펴보면 삭제하는 경우는 고려할 필요가 없으며 추가하거나 수정하는 경우만 생각하면 된다는 것을 알 수 있다.
삭제하는 경우는 l과 l사이에 문자열이 있는 경우인데 문자열이 1개보다 많은 경우면 결국 2개를 삭제해주는 것보다 l 앞이나 뒤에 2개의 문자를 추가하는 경우가 더 이득임을 알 수 있다.
고려사항
결국 아래에 산정된 경우만 고려하면 통과할 수 있는 문제가 된다.
- L과 L 사이에 문자가 1개 경우 - 문자 1개 추가
- lo, ol, ll인 경우 - 문자 1개 추가
- o, l - 문자 2개 추가
- lol - 문자 추가 x
코 드
#include <bits/stdc++.h>
using namespace std ;
int N ;
int main() {
cin >> N ;
while(N--) {
string s ;
cin >> s;
s += "kk" ;
int str = 3 ;
for(int i = 0 ; i < s.length() - 2 ; i++) {
if(s[i] == 'l') {
str = min(str, 2);
if(s[i+1] == 'l' || s[i+2] == 'l' || s[i+1] == 'o') str = min(str, 1) ;
if(s[i+1] == 'o' && s[i+2] == 'l') {
str = min(str, 0) ; break;
}
}
else if(s[i] == 'o') {
str = min(str, 2);
if(s[i+1] == 'l') str = min(str, 1) ;
}
}
cout << str << "\n" ;
}
}
느낀점: 고려사항이 많은 귀찮았던 문제다!
링크:https://www.acmicpc.net/problem/11140
'Problem Solving > 백준' 카테고리의 다른 글
[백준/C++] 14003번 가장 긴 증가하는 부분 수열 5 풀이 (0) | 2023.11.27 |
---|---|
[백준/C++] 1181번 풀이 (0) | 2023.10.12 |
[백준/C++] 2252번 줄 세우기 (Topology sort) (0) | 2023.04.12 |
[백준/C++] 1525번 퍼즐 풀이 (0) | 2023.04.03 |
[백준/C++/USACO] 23879번 Air Cownditioning 풀이 (2) | 2023.03.29 |