[BAEKJOON] 백준 9226: 도깨비말 (C#)

2024. 10. 10. 04:45IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/9226

 

 

문제

도깨비말은 언어 유희 중 하나로, 글자를 특정 법칙에 따라 재구성하는 것을 말한다.

영어권에서는 피그라틴어라는 것이 있다. 주로 어린이들이 많이 쓰는 데, 남들에게 무슨 말인지 모르게 하기 위해 종종 쓴다. 

여기엔 규칙이 있는데, 맨 앞글자가 모음이 아닐때 까지 맨 앞 글자를 어미로 돌린 후 그 끝에 ay를 붙여서 완성한다. 예를 들면 frog는 ogfray이 된다. 만약 맨 앞자음이 없는 apple과 같은 경우는 끝에 ay만 붙여 appleay가 된다. 또는, 단어에 모음이 없는 경우에도 단어의 끝에 ay만 붙인다.

주어진 단어를 피그라틴어로 바꾸는 프로그램을 작성하시오.

 

 

입력

한 줄에 하나의 단어씩 주어진다. 그리고 마지막 줄에 #을 입력받고 끝낸다.

주어진 단어는 20자를 넘지 않고 공백없이 소문자로만 이루어져있다. 여기서 모음이란 'a', 'e', 'i', 'o', 'u' 를 말한다.

 

 

출력

한 줄에 하나씩 피그라틴어를 출력한다.

 

 

 

통과한 답안

using System.Text;

namespace _9226
{
    internal class Program
    {
        static void Main(string[] args)
        {
            HashSet<char> chars = new HashSet<char>("aeiou");

            while (true)
            {
                string input = Console.ReadLine();

                if (input == "#")
                {
                    return;
                }

                StringBuilder sb = new StringBuilder();
                int idx = 0;

                for (int i = 0; i < input.Length; i++)
                {
                    if (chars.Contains(input[i]))
                    {
                        idx = i;
                        break;
                    }
                }

                sb.Append(input, idx, input.Length - idx);
                sb.Append(input, 0, idx);
                sb.Append("ay");

                Console.WriteLine(sb.ToString());
            }
        }
    }
}

 

주어진 문자열에서 처음으로 모음이 나올때까지

나왔던 자음들을 순서대로 문자열의 뒤로 보내고,

"ay"를 문자열에 맨 뒤에 추가한 후에 출력하는 문제이다.

 

StringBuilder와 HashSet을 이용하여 풀이하였는데,

HashSet을 이용하여 모음이 나오는지 확인하고,

StringBuilder를 이용하여 필요한 문자들을 수정하도록 구현하였다.