728x90
https://www.acmicpc.net/problem/10804
10804번: 카드 역배치
1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다.
www.acmicpc.net
주어진 구간의 값을 역 배치해주면 되는 문제인데, 이 문제는 swap() 함수를 사용해서 값을 스와핑 해줬다.
바꿀 배열이 짝수/홀수이든 상관없이 (홀수의 경우라도, 가운데 값은 swap하지 않기 때문)
(s ~ mid), (mid+1 ~ e) 값을 swap 해준다.
ex) s = 5, e = 10 인 경우
5 6 7 8 9 10
i=5 -> 10-5+5= 10
i=6 -> 10-6+5= 9
i=7 -> 10-7+5= 8
i와 (e-i+s)인 원소를 swap 해준다.
🌱규칙 못 찾겠으면 그냥 하나씩 해보는 게 최선이다..^^
#include <iostream>
#include <algorithm>
using namespace std;
int card[22];
void solution(int s, int e){
int mid = (e+s-1)/2;
for(int i=s; i<=mid; i++){
swap(card[i], card[e-i+s]);
}
}
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
for(int i=1; i<=20; i++) card[i] = i;
for(int i=0; i<10; i++){
int a, b;
cin >> a >> b;
solution(a, b);
}
for(int i=1; i<=20; i++) cout << card[i] << ' ';
cout << '\n';
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 3028번: 창영마을 (0) | 2022.04.22 |
---|---|
[백준/c++] 14470번: 전자레인지 (0) | 2022.04.22 |
[백준/c++] 1592번: 영식이와 친구들 (0) | 2022.04.22 |
[백준/c++] 9465번: 스티커 (0) | 2022.03.10 |
[백준/c++] 1309번: 동물원 (0) | 2022.03.10 |