개발/알고리즘
2024-04-20 앳코더 (A,B,C)
차가운콩
2024. 4. 21. 01:33
아직도 실력이 많이 모자란거 같음을 느낍니다.
앳코더는 A랑 B를 시간안에 풀었고
쉬웠습니다.
하지만 C부터는 번역이 이상해서인지 모르겠으나 방향을 잘못 잡은거 같습니다.
대회가 끝나고 새벽 2시간 동안 더 풀어봐서야 방향을 잡고 풀어냈습니다.
처음엔 Vector를 스왑해주는 곳에서 v[nx]와 v[ny]의 second 값을 바꿔야 한다고 생각하였습니다.
그러나 천천히 계속 생각하다보니 v[arr[i]-1]의 second값을 바꿔야하는걸 깨달았습니다.
오늘 느낀점은 문제를 머릿속으로 차근차근 풀어보는것을 풀도록 노력하고 문제가 안풀려도
계속 보면서 풀다보면 풀린다는 것 입니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(pair<int,int> a, pair<int,int> b){
return a.first < b.first;
}
int main() {
int n;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
vector<pair<int,int>> v;
vector<pair<int,int>> v2;
cin >> n;
int arr[n+1] = {0,};
for(int i = 0; i < n; i++){
cin >> arr[i];
v.push_back({arr[i],i+1});
}
sort(v.begin(),v.end(),comp);
for(int i = 0; i < n; i++){
int nx = v[i].first;
int ny = v[i].second;
if(nx == ny) {
continue;
}
v2.push_back({nx,ny});
v[arr[i]-1].second = ny;
v[i].second = i+1;
int temp = arr[i];
arr[i] = arr[ny-1];
arr[ny-1] = temp;
}
cout << v2.size() << '\n';
for(auto abs : v2){
cout << abs.first << " " << abs.second << '\n';
}
}