정화 코딩

[C++] 브실이의 구슬 아이스크림 (백준 29714번) 본문

PS

[C++] 브실이의 구슬 아이스크림 (백준 29714번)

jungh150c 2024. 6. 18. 02:21

https://www.acmicpc.net/problem/29714

 

#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n;
    cin >> n;
    int total = n;
    map<int, int> ic;
    
    for (int i = 0; i < n; i++) {
        int tmp;
        cin >> tmp;
        if (ic.find(tmp) == ic.end()) {
            ic.insert({tmp, 1});
        } else {
            ic[tmp]++;
        }
    }

    int q;
    cin >> q;

    for (int tq = 0; tq < q; tq++) {
        int an, bn;

        cin >> an;
        vector<int> a(an);
        for (int i = 0; i < an; i++) {
            cin >> a[i];
        }

        cin >> bn;
        vector<int> b(bn);
        for (int i = 0; i < bn; i++) {
            cin >> b[i];
        }

        bool avail = true;

        for (int i = 0; i < an; i++) {
            if (ic.find(a[i]) == ic.end() || ic[a[i]] == 0) {
                avail = false;
                for (int j = 0; j < i; j++) {
                    ic[a[j]]++;
                    total++;
                }
                break;
            }
            ic[a[i]]--;
            total--;
        }

        if (avail) {
            for (int x: b) {
                ic[x]++;
                total++;
            }
        }
    }

    cout << total << endl;
    for (auto x: ic) {
        for (int i = 0; i < x.second; i++) {
            cout << x.first << ' ';
        }
    }
}

쉬워보였는데 날 생각보다 오래 괴롭혔던 문제... (정답)

일단 구슬 색이 10e9까지 가능하니까 크기가 10e9인 배열을 사용하기 보다는 map을 사용하자!

그리고 endl에 대한 설명은 나도 제대로 이해가 안 되어서 일단 PS에서 문제가 생기지 않을 정도로만 정리해보다면 다음과 같다. 

입력과 출력이 번갈아 나오는 경우(?)에는 출력 버퍼를 비워줘야 제대로 출력이 된다. endl은 버퍼를 비우고 개행 문자를 삽입하는 방식인 반면, '\n'은 버퍼를 비워주지 않는다. 즉, 이런 문제 같은 경우에는 vscode에서 확인할 때는 endl을 쓰고 제출할 때 '\n'로 바꿔서 제출하면 된다.

 

Comments