안녕하세요. 오늘은 오른쪽으로 움직일 거예요.

문제

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

아이디어

일단 단순하게 튕기는것만 고려를 해준다면 가장 큰 두개를 맨 끝 두개에, 그다음으로 큰 두개를 남은 칸중 맨 끝 두개에, 그 다음으로 큰 두개를 ... 이런식으로 가면 됩니다. 하지만 가지는 오른쪽먼저 움직이므로 더 큰게 오른쪽으로 가면 됩니다.

소스코드

#include <iostream>
#define ll long long
using namespace std;

int main(void)
{
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	ll N, i, Ans[5050] = { 0 };

	cin >> N;

	for (i = 1; i <= N / 2; i++)
	{
		if (i % 2 == 1)
		{
			Ans[i] = N - i * 2 + 2;
			Ans[N - i + 1] = N - i * 2 + 1;
		}
		else
		{
			Ans[i] = N - i * 2 + 1;
			Ans[N - i + 1] = N - i * 2 + 2;
		}
	}
	if (N % 2 == 1) Ans[N / 2 + 1] = 1;

	for (i = N; i >= 1; i--)
		cout << Ans[i] << ' ';
}


감사합니다.

0개의 댓글