[ 백준 ] 3048 / 개미

金弘均·2021년 9월 14일
0

Baekjoon Online Judge

목록 보기
27/228
post-thumbnail

# Appreciation

/*
 * Problem :: 3048 / 개미
 *
 * Kind :: Simulation
 *
 * Insight
 * - 3 3
 *   ABC
 *   DEF
 *   + 위치: CBADEF
 *     방향: rrrlll
 *     # T=0
 *       CBADEF
 *       rrrlll
 *     # T=1
 *       CBDAEF
 *       rrlrll
 *     # T=2
 *       CDBEAF
 *       rlrlrl
 *     # T=3
 *       DCEBFA
 *       lrlrlr
 *     # T=4
 *       DECFBA
 *       llrlrr
 *     # T=5
 *       DEFCBA
 *       lllrrr
 *       -> rl 은 lr 로 swap 해야한다
 *          Ant 구조체를 만들어서 다루어주자
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>
#include <algorithm>

using namespace std;

#define endl '\n'

// Set up : Global Variables
struct Ant { char ltr, dir; };

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N1, N2;
    cin >> N1 >> N2;
    string G1; cin >> G1;
    string G2; cin >> G2;
    int T; cin >> T;

    // Process
    int L1 = G1.length();
    int L2 = G2.length();
    Ant A[L1+L2];
    for (int i=0; i<L1; i++) { /* 첫 번째 그룹 초기화 */
        A[(L1-1)-i] = {G1[i], 'r'};
    }
    for (int i=0; i<L2; i++) { /* 두 번째 그룹 초기화 */
        A[L1+i] = {G2[i], 'l'};
    }

    int L = L1 + L2;
    while (T--) {
        for (int i=0; i<L-1; i++) { /* rl -> lr */
            if (A[i].dir == 'r' && A[i+1].dir == 'l') {
                swap(A[i], A[i+1]);
                i++; /* swap 한 개미들의 다음 개미로 넘어감 */
            }
        }
    }

    // Control : Output
    for (auto &a : A) {
        cout << a.ltr;
    }
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이

0개의 댓글