정신과 시간의 방
작성일
2024. 7. 25. 22:10
작성자
risehyun
  • 문제

 

  • 풀이
    1. 라이브러리에 내장된 reverse 함수를 사용하는 풀이
#include <iostream>

using namespace std;

int main()
{
    int n = 0, m = 0, start = 0, end = 0;
    int bucket[101] = { 0 };

    cin >> n >> m;

    for (int k = 0; k < 101; k++)
    {
        bucket[k] = k;
    }

    for (int i = 0; i < m; i++)
    {
        cin >> start >> end;
        reverse(bucket + start, bucket + end + 1);
    }

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

 

 

     풀이 2. i는 증가하고 j는 감소하면서 서로 교차하는 인덱스의 규칙에 swap을 사용하는 방법

#include <iostream>
using namespace std;
int main()
{
	int N, M;
	cin >> N >> M;

	int bucket[100] = { 0 };

	for (int a = 1; a <= N; a++)
	{
		bucket[a] = a;
	}

	for (int a = 1; a <= M; a++)
	{
		int i, j;
		cin >> i >> j;

		for (i; i < j; i++ & j--)
		{
			int temp = bucket[i];
			bucket[i] = bucket[j];
			bucket[j] = temp;
		}
	}

	for (int a = 1; a <= N; a++)
	{
		cout << bucket[a] << " ";
	}
}

 


     풀이 3. 가운데 값은 제외하고 입력받은 a, b의 인덱스를 서로 뒤집어주는 방법

    while(m--)
    {
        cin >> a >> b;
        if(a != b)
        {
            for(int i=0; i <= (b-a)/2; i++) 
            {
                swap(bucket[a+i], bucket[b-i]);
            }
        }
    }