[c/c++] 백준 10811(Bronze 2)

은동·2023년 3월 7일
0

Baekjoon

목록 보기
36/49

🔨 문제

https://www.acmicpc.net/problem/10811
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다.

도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위(i,j)를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.

바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.


🔨 해결방법

'단계별로 풀어보기'의 '1차원 배열'에 해당하는 재밌는 문제이다.

나는 주어진 인덱스의 범위를 좁혀가며 바구니를 뒤집어줬다
여기에서 사용한 함수는 swap()

		cin >> a >> b; // 역순으로 바꿀 바구니 인덱스 
        swap(arr[a], arr[b]);
        while (1) {
            
            a++;	//범위를 좁힘
            b--;
            if (a > b || a == b) {	// 해당 인덱스가 오름차순이 아니거나 같아진다면 종료
                break;
            }
            else swap(arr[a], arr[b]);
        }

🔨 코드

#include <iostream>
#include <algorithm>
using namespace std;

int main() {

    int n, m;
    cin >> n >> m;
    int arr[101];
    for (int i = 1; i <= 100; i++) {
        arr[i] = i;
    }
    for (int i = 0; i < m; i++) {
        
        int a, b;
        cin >> a >> b;
        swap(arr[a], arr[b]);
        while (1) {
            
            a++;
            b--;
            if (a > b || a == b) {
                break;
            }
            else swap(arr[a], arr[b]);
        }
        
    }

    for (int i = 1; i <= n; i++) {
        cout << arr[i] << ' ';
    }
    return 0;

}
profile
자자 선수입장~

0개의 댓글