PS

BOJ 10975 : 데크 소트 2

lickelon 2024. 6. 26. 23:16
  • 문제 링크 : boj.kr/10975
  • 난이도 : G5
  • 태그 : 그리디, 정렬, 맵

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 987654321
#define int long long

using namespace std;

using ld = long double;
using pii = pair<int,int>;

template <typename T1, typename T2>
istream& operator>>(istream & ist, pair<T1,T2> &p) {
    ist >> p.first >> p.second;
    return ist;
}
template <typename T>
istream& operator>>(istream & ist, vector<T> &arr) {
    for(auto &u : arr) ist >> u;
    return ist;
}

int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n;
    cin >> n;
    vector<int> arr(n);
    cin >> arr;

    vector<int> sa(all(arr));
    sort(all(sa));

    map<int, int> _m;
    for(int i = 0; i < n; i++) {
        _m[sa[i]] = i;
    }

    int ans = 0;
    vector<pii> deq_arr;
    for(int i = 0; i < n; i++) {
        int ni = _m[arr[i]];
        bool inserted = false;
        for(auto &u : deq_arr) {
            if(u.first - ni == 1) {
                u.first = ni;
                inserted = true;
                break;
            }
            else if(ni - u.second == 1) {
                u.second = ni;
                inserted = true;
                break;
            }
        }
        if(!inserted) {
            deq_arr.push_back({ni,ni});
        }
    }
    cout << deq_arr.size();
    return 0;
}

풀이

한 덱에 들어간 원소들의 정렬했을 때의 인덱스는 1씩 차이가 나야 한다.

따라서  어떤 덱에도 인덱스가 1씩 차이나도록 넣을 수 없다면 새로운 덱을 만들어서 넣어주어야 한다.

정렬했을 때의  인덱스를 구하기 위해 맵을 사용한다.

'PS' 카테고리의 다른 글

BOJ 27923 : 햄버거최대 몇개드실수있나요?  (0) 2024.06.28
BOJ 1374 : 강의실  (0) 2024.06.27
BOJ 31235 : 올라올라  (0) 2024.06.25
BOJ 12931 : 두 배 더하기  (0) 2024.06.24
BOJ 2668 : 숫자고르기  (0) 2024.06.23