- 문제 링크 : boj.kr/15887
- 난이도 : S5
- 태그 : 구현
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<int> arr(n);
for(auto &e : arr) cin >> e;
vector<pii> ans;
for(int i = 0; i < n; i++) {
if(arr[i] == i+1) continue;
int idx = i;
while(arr[idx] != i+1) idx++;
reverse(&arr[i], &arr[idx]+1);
ans.emplace_back(i+1, idx+1);
}
cout << ans.size() << "\n";
for(auto e : ans) cout <<e.first << " " << e.second << "\n";
return 0;
}
풀이
모든 i번째 카드에 정수 i가 적히도록 하는 것은 가능하다.
첫 번째 자리부터 정수 i가 오도록 reverse 연산을 수행하면 된다.
728x90
'PS' 카테고리의 다른 글
BOJ 29160 : 나의 FIFA 팀 가치는? (0) | 2025.01.20 |
---|---|
BOJ 14940 : 쉬운 최단거리 (0) | 2025.01.19 |
BOJ 1059 : 좋은 구간 (0) | 2025.01.17 |
BOJ 11665 : 직육면체 교집합 (0) | 2025.01.16 |
BOJ 2346 : 풍선 터뜨리기 (0) | 2025.01.15 |