문제 1

문제 풀이 : Lv1. 숫자 문자열과 영단어

  • 1478 → “one4seveneight”
  • 234567 → “23four5six7”
  • 10203 → “1zerotwozero3”

네오와 프로도가 위와 같이 숫자를 문자열로 바꾸는 게임을 하고 있습니다. 이때 일부 자릿수가 영단어로 바뀌었거나 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어질 때, s가 의미하는 원래 숫자를 return 하는 함수를 완성해 주세요.

제한사항

  • 1 ≤ s의 길이 ≤ 50
  • s가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.
  • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.

입출력 예

"one4seveneight" 1478
"23four5six7" 234567
"2three45sixseven" 234567
"123" 123

 

 

 

using System;
using System.IO;
using System.Timers;

namespace ProblemPackage
{
    class Program
    {
        public static void Main(string[] args)
        {
            Tris_2021_10_15 nm = new Tris_2021_10_15();

            if(args.Length == 1)
            {
                nm.running(args[0]);
            }
            else
            {
                nm.running("23four5six7");
                nm.running("one4seveneight");
            }
        }
    }
    class Tris_2021_10_15
    {
        string[] english = new string[]
        {
            "zero",
            "one",
            "two",
            "three",
            "four",
            "five",
            "six",
            "seven",
            "eight",
            "nine"
        };
        string[] numeric = new string[]
        {
            "0",
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9"
        };
        const int TRUE=1;
        const int FAIL=0;

        public void running(string text)
        {
            string[] result = new string[100];
            string tmp;
            int kk,ii,ff;

            Console.WriteLine("Problem String------------------------------------------------");
            Console.WriteLine("[" + text + "]");

            kk=0;
            ii=0;
            while(true)
            {
                if(search_string(text)==TRUE)
                {
                    result[kk]=get_string(text);

                    ff=text.Length-result[kk].Length;
                    tmp = text.Substring(result[kk].Length,ff);
                    text="";
                    text=tmp;
                    kk++;
                }
                else
                {
                    result[kk]=get_number(text);

                    ff=text.Length-1;
                    tmp = text.Substring(1,ff);
                    text="";
                    text=tmp;
                    kk++;
                }

                ii++;
                if(text=="") break;
            }

            tmp="";
            for(kk=0; kk<ii; kk++)
            {
                if(result[kk].Length > 1) 
                {
                    for(ff=0; ff<10; ff++)
                    {
                        if(result[kk].CompareTo(english[ff])==0)
                        {
                            tmp = tmp + numeric[ff];
                            break;
                        }
                    }
                }
                else tmp = tmp + result[kk];
            }

            Console.WriteLine("Result String------------------------------------------------");
            Console.WriteLine("[" + tmp + "]");
        }
        int search_string(string str)
        {
            int kk,ii,ff;

            for(kk=0; kk<str.Length; kk++)
            {
                ii = (str.Substring(kk,1)).CompareTo("a");
                ff = (str.Substring(kk,1)).CompareTo("z");

                if(ii==0) return TRUE;
                if(ff==0) return TRUE;

                if(ii == 1 && ff == -1)
                {
                    return TRUE;
                }

                ii = (str.Substring(kk,1)).CompareTo("0");
                ff = (str.Substring(kk,1)).CompareTo("9");

                if(ii==0) return FAIL;
                if(ff==0) return FAIL;

                if(ii == 1 && ff == -1)
                {
                    return FAIL;
                }
            }
            return -1;
        }
        string get_number(string str)
        {
            return(str.Substring(0,1));
        }
        string get_string(string str)
        {
            int ii,kk;
            int max,min;
            string min_final_str;
            string max_final_str;

            max=-999;
            min=999;

            min_final_str="";
            max_final_str="";
            for(kk=0; kk<10; kk++)
            {
                ii = str.IndexOf(english[kk]);

                if(ii < 0) continue;

                if(max < ii)
                {
                    max=ii;
                    max_final_str = str.Substring(ii,english[kk].Length);
                }
                if(min > ii)
                {
                    min=ii;
                    min_final_str = str.Substring(ii,english[kk].Length);
                }
            }
            return(min_final_str);
        }
    }//end of class
}//end of nameapace

+ Recent posts