ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준 3048] 개미
    백준/문자열 2023. 3. 23. 21:42

    옛날에 문자열로만 해보려고 하다 못푼 문제다

     

    단순화 해서 풀면 되는데

    그냥 한 그룹 개미를 다 1로 보고

    다른 그룹 개미는 다 0으로 보고 풀어주면 된다

     

    어차피 나중에 출력할때는 그룹의 개미들 순서는 정해져있으므로 배치만 하면 되는 것이니까

    배치가 어떻게 되는지만 구하면 된다

     

    그리고 T가 50이하이기 때문에

    시뮬레이션으로 돌려도 1초안에는 해결할 수 있다

    즉 시간초과가 안난다

     

    여기서 시간초과 안나는걸 짐작해볼 수 있는게

    개미는 알파벳 대문자로만 구성되어 있고

    개미들은 중복되지 않으므로

    두 그룹의 개미를 연결한 문자열을 최대 26글자

     

    이걸 2중포문으로 돌려도 50*26 == 1000 남짓이므로

    충분히 1초안에 돌릴 수 있다

     


    #include <iostream>
    #include <string>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
    	ios_base::sync_with_stdio(0);
    	cin.tie(0); cout.tie(0);
    
    	int N1, N2,T;
    	cin >> N1 >> N2;
    	string s1; cin >> s1;
    	reverse(s1.begin(), s1.end());
    	string s2; cin >> s2;
    	cin >> T;
    
    	string str;
    	for (int i = 0; i < N1; i++) str += "1";
    	for (int i = 0; i < N2; i++) str += "0";
    
    	for (int i = 0; i < T; i++) {
    		for (int k = 0; k < str.size()-1; k++) {
    			if (str[k]=='1' && str[k + 1] =='0') {
    				str[k + 1] = '1';
    				str[k] = '0';
    				k++;
    			}
    		}
    	}
    
    	for (int i = 0; i < str.size(); i++) {
    		if (str[i] == '1') {
    			str[i] = s1[0];
    			s1 = s1.substr(1);
    		}
    		else {
    			str[i] = s2[0];
    			s2 = s2.substr(1);
    		}
    	}
    	cout << str;
    	return 0;
    }

     

    일단 손이 가는대로 했는데 솔떳다

    근데 몇군데 다듬을 수 있을 듯 하다

    '백준 > 문자열' 카테고리의 다른 글

    [백준 1316] 그룹 단어 체커  (0) 2024.02.23
    [백준 5052] 전화번호 목록  (2) 2024.01.10
    [백준 14426] 접두사 찾기  (0) 2024.01.10
    [백준 1283] 단축키 지정  (1) 2024.01.10
    [백준 2204] 도비의 난독증 테스트  (0) 2023.03.26