반응형
1. 예제 입력으로 예시
01 바구니 만들기
N이 10이므로 1부터 N까지 번호가 적혀있는 바구니를 만들어 준다.
int[] array = new int[n];
for(int i = 0; i<n; i++)
{
array[i] = i;
}
02 w, y, z 입력하기
예시에서 1 6 4로 나와있으므로
2. 바구니 회전시키기
begin, begin+1, ..., mid-1, mid, mid+1, ..., end-1, end -> mid, mid+1, ..., end-1, end, begin, begin+1, ..., mid-1로 회전
01 left - w이전의 값들이다.
Array의 크기는 w-1이다.
int[] left = new int[w - 1];
위의 array에서 0부터 w-1크기만큼 Copy한다.
Array.Copy(array, 0, left, 0, w - 1);
Copy의 결과는 빈 배열이 나온다.
04 leftmid - begin -> mid에서 바뀌는 부분부터 end까지
Array의 크기는 y-z-+1 이다. z가 포함되어야 하므로 z + 1이 된다.
int[] leftmid = new int[y - z + 1];
위의 array에서 z-1 부터 y - z + 1크기만큼 Copy한다.
Array.Copy(array, z - 1, leftmid,0, y - z + 1);
Copy의 결과가 아래의 그림같이 나온다.
05 rightmid - mid -> begin에서 바뀌는 부분부터 mid-1까지
Array의 크기는 z-w 이다.
int[] rightmid = new int[z - w];
위의 array에서 w-1 부터 z - w 크기만큼 Copy한다.
Array.Copy(array, w - 1, rightmid, 0, z - w);
Copy의 결과가 아래의 그림같이 나온다.
06 right - y이후 부터 끝까지
Array의 크기는 array.Length - y 이다.
int[] right = new int[array.Length - y];
위의 array에서 y 부터 array.Length - y 크기만큼 Copy한다.
Array.Copy(array, y , right, 0, array.Length - y);
Copy의 결과가 아래의 그림같이 나온다.
07 모든 배열들 concat
Enumerable.Concat()에 대해 알아보기
left, leftmid, rightmid, right을 합쳐서 array로 바꿔준다.
array = left.Concat(leftmid).Concat(rightmid).Concat(right).ToArray();
결과적으로 아래와 같은 그림이 나온다.
3. 최종코드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace baek2
{
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();
string[] token = input.Split();
int n = int.Parse(token[0]);
int m = int.Parse(token[1]);
int[] array = new int[n];
for(int i = 0; i<n; i++)
{
array[i] = i;
}
while (m > 0)
{
string input2 = Console.ReadLine();
string[] token2 = input2.Split();
int w = int.Parse(token2[0]);
int y = int.Parse(token2[1]);
int z = int.Parse(token2[2]);
int[] left = new int[w - 1];
int[] leftmid = new int[y - z + 1];
int[] rightmid = new int[z - w];
int[] right = new int[array.Length - y];
Array.Copy(array, 0, left, 0, w - 1);
Array.Copy(array, z - 1, leftmid,0, y - z + 1);
Array.Copy(array, w - 1, rightmid, 0, z - w);
Array.Copy(array, y , right, 0, array.Length - y);
array = left.Concat(leftmid).Concat(rightmid).Concat(right).ToArray();
m--;
}
for (int i = 0; i < array.Length; i++)
{
Console.Write($"{array[i] + 1} ");
}
Console.WriteLine();
}
}
}
반응형
'코딩테스트 준비 > 백준 C#' 카테고리의 다른 글
백준 C# 1157 (0) | 2023.05.08 |
---|---|
백준 C# 10988 (0) | 2023.05.08 |
백준 C# 2444 (0) | 2023.04.28 |
백준 C# 3003 (0) | 2023.04.27 |
백준 C# 25083 (0) | 2023.04.27 |
댓글