[백준BOJ10811/C++] 바구니뒤집기

현도영·2023년 12월 6일
0

백준풀이

목록 보기
18/18

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


풀이

제가 작성한 풀이 위주로 작성했습니다.

  • 배열 이용
    1~N번째 바구니마다 각각 해당하는 인덱스(숫자)를 적혀있다는 문제 조건을 '배열'을 이용해야 된다고 해석한다. 배열=바구니의 개념으로 이해하여 for문 등으로 통해 각 배열마다 숫자를 삽입한다.
  • 순서 변경
    해당 바구니의 순서를 바꿔서 출력해야 된다는 조건을 배열의 순서를 바꾼다고 해석할 줄 알아야 한다. 스왑할 두 위치의 인덱스(i, j)를 입력받고 해당 알고리즘을 작성한다.

순서 변경하는 알고리즘은 다음과 같이 작성했다.
tmp = basket[i];
basket[i] = basket[j];
basket[j] = tmp;

basket[i]에 바로 basket[j]의 값을 넣을 경우, basket[j]에 들어갈 값은 이미 잃은 상태이기 때문에 tmp라는 임의의 변수에 먼저 할당한 후, 마지막에 basket[j]에 basket[i]의 값이 들어간 tmp를 할당 받는다.


제출

#include <iostream>
using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N, M;
    int i, j = 0;
    int basket[101];

    cin >> N >> M;

    for (int k = 1; k <= N; k++)
        basket[k] = k;

    for (int k = 1; k <= M; k++) {
        cin >> i >> j;
        for (int l = j; l > i; l--) {
            int tmp = basket[i];
            basket[i] = basket[l];
            basket[l] = tmp;
            i++;
        }
    }

    for (int k = 1; k <= N; k++)
        cout << basket[k] << " ";

    return 0;
}

메모

- swap 함수 활용
스왑 알고리즘을 따로 작성하지 않고, 함수를 이용하는 방법도 있다. swap 함수는 C++ 표준 라이브러리에 제공하는 함수이며 void swap(T& a, T& b);의 형태로 이해된다. 인자로 받은 두 값을 교환할 수 있다. 따라서 swap을 이용하여 코드를 재구성하면 다음과 같다.

    for (int k = 1; k <= M; k++) {
        cin >> i >> j;
        for (int l = i; l < j; l++) {
            swap(basket[l], basket[j]);
            j--;
        }
    }
profile
코딩초보의 공부용

0개의 댓글