using System; using System.Collections.Generic; using System.Linq; class Program { static string InputPattern = "InputX"; static List GetInputList() { var WillReturn = new List(); if (InputPattern == "Input1") { WillReturn.Add("<=<<==>=><>"); } else if (InputPattern == "Input2") { WillReturn.Add(">=<=<>=>=<"); } else { string wkStr; while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr); } return WillReturn; } static void Main() { List InputList = GetInputList(); string S = InputList[0]; List RunLenList = RunLen.DeriveRunLenInfoList(S); var InsLinkedList = new LinkedList(); foreach (RunLen.RunLenInfo EachRunLen in RunLenList) { if (EachRunLen.AppearChar == '=') { InsLinkedList.AddLast(EachRunLen); } else { for (int I = 1; I <= EachRunLen.RunLen; I++) { RunLen.RunLenInfo WillAdd; WillAdd.AppearChar = EachRunLen.AppearChar; WillAdd.RunLen = 1; InsLinkedList.AddLast(WillAdd); } } while (true) { if (InsLinkedList.Count >= 3) { RunLen.RunLenInfo Last2 = InsLinkedList.Last.Value; RunLen.RunLenInfo Last1 = InsLinkedList.Last.Previous.Value; RunLen.RunLenInfo Last0 = InsLinkedList.Last.Previous.Previous.Value; if (Last0.AppearChar == '<' && Last1.AppearChar == '=' && Last2.AppearChar == '>') { InsLinkedList.RemoveLast(); InsLinkedList.RemoveLast(); InsLinkedList.RemoveLast(); continue; } } break; } } long Answer = InsLinkedList.Sum(pX => pX.RunLen); Console.WriteLine(Answer); } } #region RunLen // ランレングス圧縮(文字列) internal class RunLen { // ランレングス圧縮情報 internal struct RunLenInfo { internal char AppearChar; internal int RunLen; } // ランレングス圧縮結果を返す internal static List DeriveRunLenInfoList(string pBaseStr) { var WillReturn = new List(); int StrUB = pBaseStr.Length - 1; char PrevChar = pBaseStr[0]; int StrLen = 0; for (int I = 0; I <= StrUB; I++) { if (pBaseStr[I] != PrevChar) { RunLenInfo WillAdd; WillAdd.AppearChar = PrevChar; WillAdd.RunLen = StrLen; WillReturn.Add(WillAdd); StrLen = 0; PrevChar = pBaseStr[I]; } StrLen++; if (I == StrUB) { RunLenInfo WillAdd; WillAdd.AppearChar = pBaseStr[I]; WillAdd.RunLen = StrLen; WillReturn.Add(WillAdd); } } return WillReturn; } } #endregion