White Whale Studio

[알고리즘] 모스부호 해독 / C# 풀이 본문

IT Engineering/코딩놀이

[알고리즘] 모스부호 해독 / C# 풀이

glorymind 2015. 4. 21. 18:42
반응형

모스부호 해독입니다. 문제는 http://codingdojang.com/scode/469

위의 코딩도장의 문제입니다.

솔직히 부끄럽네요;;;

풀이를 보면 굉장히 간단하게 푸신분들도 많은데 저는 자료형에대한 이해도가 부족한건지 영 지저분하네요..ㅠㅠ



Morse.cs



콘솔로 짰으며 호출은 Main 함수에서 parse 함수를 호출하여 테스트했습니다.


주어진 모스 부호는 


.... . ... .-.. . . .--. ... . .- .-. .-.. -.--

이며

해석하게 되면 he sleeps early 가 나와야합니다.

글자와 글자 사이는 공백 하나, 단어와 단어 사이는 공백 두개로 구분합니다.



public class Morse

    {

// 배열로 알파벳과 매칭되는 모스부호를 선언합니다.

        static string[] aArr = new string[26] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

        static string[] mArr = new string[26] {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};


        static string results = "";

        public static string parse(string morseStr)

        {

            string temp = morseStr.Replace("  ", "/"); // 우선 구분을 위해 공백 두칸을 /로 치환합니다.

            temp = temp.Replace(" ", "_"); // 치환된 문자열에서 알파벳별로 구분하기위해 공백 한칸을 '_' 로 치환합니다.

            string[] arr = temp.Split('/'); // 모스 부호를 단어별로 분리합니다.


            for (int i = 0; i < arr.Length; i++)

            {

                results += getWord(arr[i]) + " "; // 분리된 단어별 배열을 함수를 통해 얻어 순차적으로 더합니다.

            }


            return results;

        }


       // 단어를 얻는 함수입니다. 모스부호로 구성된 단어를 알파벳(으로 가정)으로 분리하여 GetAlphabet 함수를 통해

   // 얻은 알파벳을 더하여 단어를 완성한 후 완성된 단어를 Return 합니다.

        public static string getWord(string str)

        {

            string word = "";


            string[] warr = str.Split('_'); // 알파벳별로 분리하여 검색


            for (int i = 0; i < warr.Length; i++)

            {

                word += GetAlphabet(warr[i]);

            }


            return word;

        }


       // 알파벳을 얻는 함수입니다. 배열루프를 돌면서 맞는 알파벳을 반환합니다.

        public static string GetAlphabet(string str)

        {

            string results = "";

            for (int i = 0; i < mArr.Length; i++)

            {

                if (str.Equals(mArr[i]))

                {

                    results = aArr[i];

                }

            }


            return results;

        }

        

    }

반응형
Comments