[BOJ][C#] 4659 비밀번호 발음하기

LimJaeJun·2023년 11월 19일
0

PS/BOJ

목록 보기
40/108

📕 문제

📌 링크

📗 접근 방식

  • 문자열이 "end"일 때까지 반복
  • 문자열을 입력받고, 각 문자가 모음인지 자음인지를 판별하여 배열에 저장

다음과 같은 조건을 체크하여 flag 설정

  • 같은 글자가 연속적으로 두 번 오면 안 되나, "ee"와 "oo"는 허용합니다.
  • 모음이 3개 혹은 자음이 3개 연속으로 오면 안 됩니다.
  • 모음("a", "e", "i", "o", "u") 하나를 반드시 포함하여야 합니다.

결과를 StringBuilder에 추가해준다.

📘 코드

using System.Text;

namespace BOJ_4659
{
    class Program
    {
        static void Main()
        {
            char[] vowel = { 'a', 'e', 'i', 'o', 'u' };
            bool flag = true;

            string s = string.Empty;
            StringBuilder sb = new StringBuilder();
            while (true)
            {
                s = Console.ReadLine();
                bool[] word = new bool[s.Length]; // true : 모음, false : 자음 
                flag = true;
                
                if (s == "end")
                {
                    break;
                }

                for (int i = 0; i < s.Length; i++)
                {
                    for (int v = 0; v < vowel.Length; v++)
                    {
                        if (s[i] == vowel[v])
                        {
                            word[i] = true;
                        }
                    }
                }

                for (int i = 0; i < word.Length; i++)
                {
                    //같은 글자가 연속적으로 두번 오면 안되나, ee 와 oo는 허용한다.
                    if (word.Length >= 2 && i < s.Length - 1)
                    {
                        if (s[i] == s[i + 1])
                        {
                            if(s[i] == 'e' || s[i] == 'o') continue;
                            
                            flag = false;
                        }
                    }
                    
                    //모음이 3개 혹은 자음이 3개 연속으로 오면 안 된다.
                    if (word.Length >= 3 && i < s.Length - 2)
                    {
                        if (word[i] == word[i + 1] && word[i + 1] == word[i + 2])
                        {
                            flag = false;
                        }
                    }
                }

                //모음(a,e,i,o,u) 하나를 반드시 포함하여야 한다. => 전부 자음인 경우
                if (word.All(x => x == false))
                {
                    flag = false;
                }

                sb.AppendLine(flag ? $"<{s}> is acceptable." : $"<{s}> is not acceptable.");
            }

            Console.Write(sb);
        }
    }
}

📙 오답노트

📒 알고리즘 분류

  • 구현
  • 문자열
profile
Dreams Come True

0개의 댓글

관련 채용 정보