Programmer:)
[ 프로그래머스 / C# ] 숫자 문자열과 영단어(2021 카카오 채용 연계 인턴쉽)(Dictionary) 본문
반응형
문제
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배는 빠름. 역시 쉬운게 빨라.... ㅎㅎ
반응형
'프로그래머스 정복 > C#' 카테고리의 다른 글
[ 프로그래머스 / C# ] 과일 장수 (0) | 2022.11.16 |
---|---|
[ 프로그래머스 / C# ] K번째 수 (0) | 2022.03.29 |
[ 프로그래머스 / C# ] 음양 더하기 (0) | 2021.10.25 |
[ 프로그래머스 / C# ] 없는숫자 더하기(Except) (0) | 2021.10.22 |
[ 프로그래머스 / C# ] 로또의 최고 순위와 최저 순위(for/foreach) (0) | 2021.10.18 |
Comments