알고리즘/백준

[백준/c++] 10804번: 카드 역배치

녕이 2022. 4. 22. 13:51
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