No Rules Rules

그래서 대회 이름 뭐로 하죠 (feat. 백준, 27466번) 본문

생활/코테

그래서 대회 이름 뭐로 하죠 (feat. 백준, 27466번)

개발하는 완두콩 2023. 2. 16. 12:17
728x90
반응형

그래서 대회 이름 뭐로 하죠
https://www.acmicpc.net/problem/27466

 

27466번: 그래서 대회 이름 뭐로 하죠

오늘도 운영진은 대회 이름을 정하고 있다. 몇 주째 대회 이름을 못 정하고 구글 드라이브, 지문/에디토리얼 파일, 디스코드 서버에 대회 이름으로 "대회 이름 뭐로 하죠"를 사용하고 있다. 그러

www.acmicpc.net

 

// woohyeon.kim
// kim519620.tistory.com
#include <iostream>
#include <string>
using namespace std;
int N, M;
string str;
bool func(register int idx, register int num, register int remove){
    if(remove == N - M){
        register int t = 1;
        for(register int i = str.size() - 1; i >= 0; --i){
            if(str.at(i) == '!')
                continue;
            if(t == 1){
                if(str.at(i) != 'A' && str.at(i) != 'E' && str.at(i) != 'I' && str.at(i) != 'O' && str.at(i) != 'U')
                    ++t;
                else
                    return false;    
            }
            else if(t <= 3){
                if(str.at(i) == 'A')
                    ++t;
                else
                    return false;
            }
            if(t > 3)
                return true;
        }
    }
    if(num == 1){
        if(str.at(idx) != 'A' && str.at(idx) != 'E' && str.at(idx) != 'I' && str.at(idx) != 'O' && str.at(idx) != 'U')
            return func(idx - 1, num + 1, remove);
        else{
            str.at(idx) = '!';
            return func(idx - 1, num, remove + 1);
        }
    }
    else if(num <= 3){
		if(str.at(idx)  == 'A')
            return func(idx - 1, num + 1, remove);
		else {
			str.at(idx)  = '!';
			return func(idx - 1, num, remove + 1);
		}
	}
	else{
		str.at(idx)  = '!';
		return func(idx - 1, num, remove + 1);
	}
    return true;
}
int main(){
    ios::sync_with_stdio(false), cin.tie(NULL);
    cin >> N >> M >> str;
    if(func(str.size() - 1, 1, 0)){
        cout << "YES\n";
        for(auto& ch : str){
            if(ch == '!')
                continue;
            cout << ch;
        }
    }
    else
        cout << "NO";
    return 0;
}
// *&)*@*

 

반응형

문자열의 뒤에서부터 체크하며 가능한 문자만 남기는 방식으로 풀이하였습니다.

불가능한 문자는 삭제하진 않고 '!' 로 치환하여 출력을 하지 않는 방향으로 풀이했습니다. (문자열을 삭제하면 그만큼 시간 소비가 발생하니까요.)

728x90
반응형
Comments