펭로그

[C++] 백준 BOJ 3048 개미 본문

Study/PS(Algorithm)

[C++] 백준 BOJ 3048 개미

노랑펭귄 2018. 9. 21. 11:24

문제링크 : https://boj.kr/3048


개미 그룹이 서로 -> <- 방향으로 맞닥뜨렸을 때 스왑이 일어나는 것을 구현하면 된다.

구조체를 만들어서 별도의 디렉션을 저장해주어도 되지만 귀찮아서 대문자 / 소문자로 개미 그룹을 구분했다.

1
2
3
4
5
6
7
// 방향 구분을 위해 ->는 소문자 <- 는 대문자로 입력
for (int i = 1; i <= n1; i++) {
    cin >> str[n1 - i];
    str[n1 - i] = str[n1 - i] - 'A' + 'a';
}
for (int i = n1; i < size; i++)
    cin >> str[i];
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// BOJ 3048 개미
#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    freopen("../input.txt""r", stdin);
 
    int n1, n2, cnt;
    cin >> n1 >> n2;
    int size = n1 + n2;
    vector<char> str(size);
    // 방향 구분을 위해 ->는 소문자 <- 는 대문자로 입력
    for (int i = 1; i <= n1; i++) {
        cin >> str[n1 - i];
        str[n1 - i] = str[n1 - i] - 'A' + 'a';
    }
    for (int i = n1; i < size; i++)
        cin >> str[i];
    cin >> cnt;
 
    while (cnt--) {
        for(int i = 1; i < size; i++){
            // -> <- 일 경우 스왑
            if(str[i-1>= 'a' && str[i-1<= 'z'
                && str[i] >= 'A' && str[i] <= 'Z'){
                char tmp = str[i-1];
                str[i-1= str[i];
                str[i] = tmp;
                i++// 탐색을 했으므로 스킵
            }
        }
    }
    for (auto i : str) {
        if (i >= 'a' && i <= 'z')
            cout << char(i + 'A' - 'a');
        else
            cout << i;
    }
 
    return 0;
}
cs


Comments