본문 바로가기

Problem Solving/백준

[백준/C++] 11140번 LOL 해설

문제 해석



문제 풀이

 


문제를 조금만 살펴보면 삭제하는 경우는 고려할 필요가 없으며 추가하거나 수정하는 경우만 생각하면 된다는 것을 알 수 있다.

삭제하는 경우는 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

 

11140번: LOL

당신 친구 지민이는 지금 할 일이 없다. 그리고 매우 심심하다. 그래서 쓸데없는 짓으로 시간을 때우려고 한다. 그래서 단어 하나가 주어질 때 단어에 'lol'이 들어가도록 글자를 추가하거나 변경

www.acmicpc.net