본문 바로가기
공부기록/[Algorithm]

백준 10811번 <바구니 뒤집기> - C++

by RiverWon 2024. 8. 2.

 

생각


이전에 공 바꾸기에서는 두 개의 값만 스왑하면 됐는데, 이번에는 바구니의 구간을 역순으로 정렬해야 한다.

1. 두 구간을 입력받는다

2. 빈 배열에 구간의 뒷부분부터 값을 할당한다.

3. 빈 배열의 값을 그대로 원래 배열에 넣어준다.

#include <iostream>

using namespace std;

int main() {
    
    int arr[105];
    
    for(int i=0; i<106; i++){
        arr[i] = i;
    }
    
    int n, m;
    cin >> n >> m;
    
    int a, b, c, temp[105];
    
    for(int i=1; i<=m; i++){
        cin >> a >> b;
        c = 1;
        for(int j=b; j>=a; j--){
            temp[c] = arr[j];
            c++;
        }
        c = 1;
        for(int j=a; j<=b; j++){
            arr[j] = temp[c]; 
            c++;
        }
        c = 1;
    }
    
    for(int i=1; i<=n; i++){
        cout << arr[i] << " ";
    }
    
    return 0;
}

 

temp배열의 index를 임의로 도입하면서 코드가 좀 난잡해졌다. temp 배열 인덱스를 건들 수 있는 다른 방법이 있을 것 같은데.. 일단 답지 참조 없이 고민 좀 더 해 보다가 생각나면 수정하겠다.

 

도식화

역순으로 넣어서 평순으로 꺼내오면 된다!