トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
ABC-036-B 回転
■■■問題■■■
N×N のマス目があります。
各マスには'o'または'x'という文字が書かれています。
上からi番目、左からj番目に書かれている文字は si,j です。
このマス目を時計回りに90度回転してください。
■■■入力■■■
N
s1,1 ・・・ s1,N
・
・
・
sN,1 ・・・ sN,N
●1 <= N <= 50
●si,j は'o'または'x'である。
■■■出力■■■
マス目を時計回りに90度回転した結果を出力せよ。
出力はN行からなる。それぞれの行にN文字出力せよ。
i番目の行のj番目の文字は、回転後の上からi番目、左からj番目のマス目を表す。
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("4");
WillReturn.Add("ooxx");
WillReturn.Add("xoox");
WillReturn.Add("xxxx");
WillReturn.Add("xxxx");
//xxxo
//xxoo
//xxox
//xxxx
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
int N = int.Parse(InputList[0]);
int UB = N - 1;
char[,] BanArr = new char[UB + 1, UB + 1];
for (int Y = 1; Y <= InputList.Count - 1; Y++) {
for (int X = 0; X <= UB; X++) {
BanArr[X, Y - 1] = InputList[Y][X];
}
}
var sb = new System.Text.StringBuilder();
for (int Y = 0; Y <= BanArr.GetUpperBound(1); Y++) {
for (int X = 0; X <= BanArr.GetUpperBound(0); X++) {
sb.Append(BanArr[Y, UB - X]);
}
sb.AppendLine();
}
Console.Write(sb.ToString());
}
}
解説
位置ベクトルを、時計回りに90度回転させてます。