Unity

[프로그래머스] 숫자 문자열과 영단어 C#

박도치 2023. 12. 8. 10:54

 

네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.


다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

 

1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"

0 zero
1 one
2 two
3 three
4 four
5 five
6 six
7 seven
8 eight
9 nine

 

 

코드

     public class Solution
     {
         static string str = "";
         static string chageNum = "";

         public int solution(string s)
         {

             int answer = 0;
             int a;

             for (int i = 0;  i < s.Length; i++)
             {
                 char c = s[i];

                 if (int.TryParse(c.ToString(), out a))
                 {
                     str += s[i];
                 }
                 else
                 {
                     chageNum += s[i];
                     ReplaceNum();
                 }
             }

             bool checkNum = int.TryParse(str, out a);

             if(checkNum)
             {
                 answer = a;
             }

             return answer;
         }
         void ReplaceNum()
         {
             switch (chageNum)
             {
                 case "zero":
                     str += "0";
                     chageNum = "";
                     break;
                 case "one":
                     str += "1";
                     chageNum = "";
                     break;
                 case "two":
                     str += "2";
                     chageNum = "";
                     break;
                 case "three":
                     str += "3";
                     chageNum = "";
                     break;
                 case "four":
                     str += "4";
                     chageNum = "";
                     break;
                 case "five":
                     str += "5";
                     chageNum = "";
                     break;
                 case "six":
                     str += "6";
                     chageNum = "";
                     break;
                 case "seven":
                     str += "7";
                     chageNum = "";
                     break;
                 case "eight":
                     str += "8";
                     chageNum = "";
                     break;
                 case "nine":
                     str += "9";
                     chageNum = "";
                     break;
             }
         }
     }

 

 

풀이

if문에 switch문을 길게 넣으니 보기 힘들어서 메서드로 빼주는 식으로 했다.

 

(1) static 선언

젤 위에 static으로 선언된 str과 changeNum은 각각의 역할은 이렇다

 

  • str 은 주어진 문자열이 변환되었을 때 담기는 곳
  • chageNum 은 글자를 모아 단어가 완성되었을 때 변환시켜주는 역할 (예를 들어 zero면 z e r o 를 합쳐주는 역할)

 

(2) for문

일단 string을 char로 반복문을 돌려서 검사한다.

그래서 Tryparse로 문자열이 수로 변할 수 있다면 str에 담아주고, 아니라면 chageNum 에 담아준다.

 

(3) swtich문

굉장히 길어보이지만 결국 zero 가 들어오면 0, one 이 들어오면 1 ... nine이 들어오면 9 로 변환해주는 switch문이다.

주의할점은 변환했다면 chageNum을 초기화 시켜줘야한다. 아니면 zeronine이런식으로 계속 들어오기 때문이다.

 

마지막으로 checkNum에서 숫자 형식의 string을 tryparse로 변환해준 후 answer에 담아준다.