Programmer:)

[ 프로그래머스 / C# ] 숫자 문자열과 영단어(2021 카카오 채용 연계 인턴쉽)(Dictionary) 본문

프로그래머스 정복/C#

[ 프로그래머스 / C# ] 숫자 문자열과 영단어(2021 카카오 채용 연계 인턴쉽)(Dictionary)

ryeggg 2021. 10. 22. 01:15
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/81301?language=csharp 

 

코딩테스트 연습 - 숫자 문자열과 영단어

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

programmers.co.kr

 

아스키코드 활용

using System;

public class Solution {
     string[] m_arrayAlphabetNum = new string[10] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    
    public int solution(string s)
    {
        s = s.ToLower();
        string alphabetNum = "";
        string answerText = "";

        for (int i = 0; i < s.Length; i++)
        {
            char c = s[i];
            int ascill_char = (int)c;
            if (ascill_char >= 48 && ascill_char <= 57)
            {
                if (alphabetNum.Length != 0)
                {
                    int intNum = Compair(alphabetNum);
                    answerText += intNum.ToString();
                    alphabetNum = "";
                }
                answerText += c;
            }
            else
            {
                if (alphabetNum.Length >= 3)
                {
                    int intNum = Compair(alphabetNum);
                    if (intNum != 99)
                    {
                        answerText += intNum.ToString();
                        alphabetNum = "";
                    }
                }

                alphabetNum += c;

                if (i == s.Length - 1)
                {
                    int intNum = Compair(alphabetNum);
                    answerText += intNum.ToString();
                    alphabetNum = "";
                }
            }
        }
        int answer = int.Parse(answerText);
        return answer;
    }
    
    private int Compair(string s)
    {
      string inputS = s;
        int valueS = 99;
        for (int i = 0; i < m_arrayAlphabetNum.Length; i++)
        {
            if (inputS == m_arrayAlphabetNum[i])
            {
                valueS = i;
                break;
            }
        }
        return valueS;
    }
}

 

딕셔너리가 손에 잘 익지 않아 연습겸 재 작성

using System;
using System.Collections.Generic;

public class Solution {
    private Dictionary<string, int> m_values = new Dictionary<string, int>();
    
    public int solution(string s)
    {
        m_values.Add("zero", 0);
        m_values.Add("one", 1);
        m_values.Add("two", 2);
        m_values.Add("three", 3);
        m_values.Add("four", 4);
        m_values.Add("five", 5);
        m_values.Add("six", 6);
        m_values.Add("seven", 7);
        m_values.Add("eight", 8);
        m_values.Add("nine", 9);
        
        string result = "";
        string tempString = "";
        int answer = 0;
        
        s = s.ToLower();
        
        for(int i = 0; i < s.Length; i++)
        {
            char c = s[i];
            
            if(char.IsDigit(c))
            {
                result += c;
            }
            else
            {
                tempString += c;
                
                if(m_values.TryGetValue(tempString, out int n))
                {
                    tempString = "";
                    result += n;
                }
            }
            
        }
        
        answer = int.Parse(result);
        return answer;
    }
    
    
}

 

 

 

속도는 위의 코드가 2배는 빠름. 역시 쉬운게 빨라.... ㅎㅎ

 

반응형
Comments