반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/81301
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
숫자와 숫자를 영어단어로 바꾼 것들이 합쳐진 문자열 s가 주어졌을 때 문자열을 숫자로 돌렸을때의 숫자를 구하시오
🧠 나의 접근 방식과 시행착오
단순하게 문자열 s를 처음부터 순회를 하면서 영어 알파벳인 경우 단어가 완성되면 숫자로 바꾸고, 숫자인 경우 바로 바꾸어서 합산을 하는 형태로 풀었다. 18분 정도 소요된 문제. 정답은 확실하게 풀었지만 StringBuilder의 ToString이 자주 불리는 점과 코드가 생각보다 길어져서 간단하지 않은 부분이 아쉬워서 피드백을 받아보기로 함
using System;
using System.Collections.Generic;
using System.Text;
public class Solution
{
/// <summary>
/// 숫자 문자열과 영단어
/// https://school.programmers.co.kr/learn/courses/30/lessons/81301
/// </summary>
public int solution(string s)
{
var numDict = new Dictionary<string, int>()
{
{ "zero", 0 },
{ "one", 1 },
{ "two", 2 },
{ "three", 3 },
{ "four", 4 },
{ "five", 5 },
{ "six", 6 },
{ "seven", 7 },
{ "eight", 8 },
{ "nine", 9 },
};
int answer = 0;
var sb = new StringBuilder();
string word = string.Empty;
for (int i = 0; i < s.Length; i++)
{
int val = -1;
// 숫자인 경우 그냥 넣음
if (s[i] >= '0' && s[i] <= '9')
{
val = s[i] - '0';
}
else
{
sb.Append(s[i]);
word = sb.ToString();
if (word.Length > 0 && numDict.TryGetValue(word, out int num))
{
val = num;
sb.Clear();
}
}
if (val >= 0)
{
if (answer > 0)
{
answer *= 10;
}
answer += val;
}
}
return answer;
}
}
/// <summary>
/// C# 7.3
/// </summary>
internal class Program
{
public static void Main(string[] args)
{
var sl = new Solution();
var sArr = new[] { "one4seveneight", "23four5six7", "2three45sixseven", "123" };
foreach (var ar in sArr)
{
Console.WriteLine(sl.solution(ar));
}
}
}
✅ 풀이 코드
피드백에서 알려준 방식은 생각도 못했던 Replace를 써서 s를 숫자만 들어있는 문자열로 바꾸고 해당 문자열을 int.Parse로 돌리는 것이다. 정말 간단하게 풀이가 되었고 반복문의 순회도 더욱 짧은 탓에 효율도 좋다.생각의 관점을 단어를 교체한다는 생각을 먼저 했어야 했던 문제로 보인다. 특히 영어단어와 index가 숫자가 1:1 매칭이 되는 점도 정말 명쾌하다
public int solution(string s)
{
string[] words = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
for (int i = 0; i < words.Length; i++)
{
s = s.Replace(words[i], i.ToString());
}
return int.Parse(s);
}
🔄 정리
문제를 그냥 푸는 것은 어떻게든 할 수 있으나 간단하고 빠르고 효율적으로 푸는 방법에 대해 생각하는 법을 익혀가야 할 듯 하다.
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.1] 푸드 파이트 대회 [프로그래머스_코딩테스트] [구현] [20분] (0) | 2025.06.04 |
---|---|
[Lv.1] 콜라 문제 [프로그래머스_코딩테스트] [수학, 반복 계산] [25분] (0) | 2025.06.02 |
[Lv.1] 두 개 뽑아서 더하기 [프로그래머스_코딩테스트] [Set, 정렬] [25분] (0) | 2025.05.31 |
[Lv.1] 최소직사각형 [프로그래머스_코딩테스트] [완전탐색, 정렬] [25분] (0) | 2025.05.30 |
[Lv.1] K번째 수 [프로그래머스_코딩테스트] [정렬] [25분] (0) | 2025.05.30 |