トップページに戻る    次の競技プログラミングの問題へ    前の競技プログラミングの問題へ

第2回 CodeIQプロコン 1問目 ロックオン!

■■■問題■■■

矩形に配置された文字列データが与えられます。
その中に、急所を表す文字「*」の場所を見つけ、その座標を答えてください。
幅W、高さHの矩形について、左上を(1, 1)、右下を(W, H)とします。

■■■入力■■■

標準入力から、1行目に矩形文字列データの幅Wと高さHが、半角スペースで区切られた状態で与えられます。
2行目以降のH行には、幅Wの文字列が与えられます。文字列データに使われる文字は「#」または「*」のみです。

■■■出力■■■

標準出力に、急所を表す「*」の座標を出力してください。
座標は横方向・縦方向の順に、半角スペースで区切り、1行で出力してください。
※1オリジンであることにご注意ください。


C#のソース

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static string InputPattern = "Input1";

    static List<string> GetInputList()
    {
        var WillReturn = new List<string>();

        if (InputPattern == "Input1") {
            WillReturn.Add("6 8");
            WillReturn.Add("######");
            WillReturn.Add("######");
            WillReturn.Add("######");
            WillReturn.Add("##*###");
            WillReturn.Add("######");
            WillReturn.Add("######");
            WillReturn.Add("######");
            WillReturn.Add("######");
            //3 4
        }
        else {
            string wkStr;
            while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
        }
        return WillReturn;
    }

    static void Main()
    {
        List<string> InputList = GetInputList();
        int[] wkArr = InputList[0].Split(' ').Select(X => int.Parse(X)).ToArray();
        int W = wkArr[0];
        int H = wkArr[1];

        for (int LoopH = 1; LoopH <= H; LoopH++) {
            for (int LoopW = 1; LoopW <= W; LoopW++) {
                if (InputList[LoopH][LoopW - 1] == '*') {
                    Console.WriteLine("{0} {1}", LoopW, LoopH);
                    return;
                }
            }
        }
    }
}


解説

ナイーブに実装してます。