퀴즈 질문 |
|
|
예상답변/설명 |
각 숫자를 순서대로 방문하여 숫자가 같을 경우 카운터를 증가시키고, 다른 경우 카운터를 결과에 추가한 후 카운터를 리셋, 다음 문자를 계속 체크한다.
static void Main(string[] args)
{
string num = 1.ToString();
Console.WriteLine(num);
for (int i = 0; i < 10; i++)
{
num = LookAndSay(num);
Console.WriteLine(num);
}
}
static string LookAndSay(string s)
{
StringBuilder result = new StringBuilder();
char curr = default(char);
int count = 0;
foreach(char ch in s)
{
if (ch != curr)
{
if (curr == default(char))
{
curr = ch;
count = 1;
result.Append(curr);
}
else
{
result.Append(count.ToString());
curr = ch;
count = 1;
result.Append(curr);
}
}
else
{
count++;
}
}
result.Append(count);
return result.ToString();
}
그리고 다음과 같은 Recursive 방식을 생각해 볼 수도 있다.
static string LookAndSayRecursive(string s)
{
if (string.IsNullOrEmpty(s)) return "";
if (s.Length == 1) return s[0] + "1";
if (s[s.Length - 1] != s[s.Length - 2])
{
return LookAndSayRecursive(s.Substring(0, s.Length - 1))
+ s[s.Length - 1] + "1";
}
else
{
string r = LookAndSayRecursive(s.Substring(0, s.Length - 1));
int lastN = int.Parse(r.Substring(r.Length - 1, 1)) + 1;
return r.Substring(0, r.Length - 1) + lastN.ToString();
}
}
|