【C#で競プロ】ABC107のBに手こずる

2019年11月19日

DFSとかの問題で見たことある問題の形式。
単純に入出力を調整するだけの問題だけど、どんなデータ型にしよかで迷う。
List<char> でループ中に削除すると、インデックスがずれちゃうとか。
だから逆順に対象を削除していったり。
こういう典型的な入出力のパターン、どういうデータ構造にしようかとか迷うのは時間の無駄なので、何かしら事前に自分の中でも法則を作っとかないと。

というか、今年中に緑行きたいとか思ってたけど、コンテストにも全然参加できてないし、アルゴリズムも全然勉強できてない。やばい。
ま、それでも諦めず、気長にやってこう。

https://atcoder.jp/contests/abc107/tasks/abc107_b

using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Atcoder
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            var H = input[0];
            var W = input[1];
            List<List<char>> row = new List<List<char>>();
            for (int i = 0; i < H; i++)
            {
                var tmp = Console.ReadLine();
                if (tmp.Any(x => x == '#'))
                {
                    row.Add(tmp.ToList());
                }
            }
 
            for (int i = W - 1; i >= 0; i--)
            {
                bool delFlg = true;
                for (int j = 0; j < row.Count; j++)
                {
                    if (row[j][i] == '#')
                    {
                        delFlg = false;
                        break;
                    }
                }
 
                if (delFlg)
                {
                    for (int j = 0; j < row.Count; j++)
                    {
                        row[j].RemoveAt(i);
                    }
                }
            }
 
            foreach (var r in row)
            {
                Console.WriteLine(new string(r.ToArray()));
            }
        }
    }
}