*(백준BAEKJOOB )* 10811 바구니 뒤집기

2023. 5. 5. 15:00언어/c, c++

728x90
문제출처:

https://www.acmicpc.net/problem/10811

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

 

 

 

 

문제풀이:

 

간단하게 코드 설명

1. N개의 바구니 배열을 만들어서 넣어줌

2. 역순범위 M의 값 반복문 만들어줌

3. 역순범위 a , b 값을 받아준다. (a부터 b까지 역순으로 적음)

4. 반복문이 (b-a+1)/2 만큼 돌려줌 

 

쉽게설명

1. 바구니 5개로 잡겠다. 5개의 바구니에 1 2 3 4 5 각각 넣어줌

2. M을 4로잡고 1 2 3 4

3. a가 1 b가 4라면 4 3 2 1

4. 만약 a가 2 b가5일때  2와5 3과4 교환해야 되므로  

 

 

코드:
#include <iostream>
using namespace std;

int main() {
    int N;
    int Basket[101] = { 0, };
    int M;
    int a, b;
    int temp = 0;

    cin >> N >> M;

    for (int i = 1; i <= N; i++) {
        Basket[i] = i;
    }
    for (int i = 1; i <= M; i++) {
        cin >> a >> b; // 1 3 라고하면 

        // a부터 b까지의 수를 역순으로 바꾸는 작업
        for (int j = 0; j < (b - a + 1) / 2; j++) {
            temp = Basket[a + j]; //1
            Basket[a + j] = Basket[b - j]; // 3자리에 1이감 
            Basket[b - j] = temp;  //
        }
    }

    // 결과 출력
    for (int i = 1; i <= N; i++) {
        cout << Basket[i] << " ";
    }

    return 0;
}

+ 다른코드 비교

    for (int i = 1; i <= M; i++) {
        cin >> a >> b;
        for (int j = 0; j <= (b - a) / 2; j++)
        {
            swap(Basket[j + a], Basket[b - j]);
        }
    }

 

 

참고:

구현 문제 

+역순으로 출력할때 바꾸는 기초 작업을 알게됨 

+swap코드를 이용해서 더 쉽고 가독성 있게 만들수있다. 

728x90