본문 바로가기
Development/Baekjoon

[C#] 2941번: 크로아티아 알파벳

by Mobics 2025. 8. 21.

목차


    백준 단계별로 풀어보기

    25.08.21

    6단계: 심화 1


    2941번: 크로아티아 알파벳

    문제 링크 : https://www.acmicpc.net/problem/2941

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 'IndexOutOfRange' 런타임 에러

    : 정해진 배열의 크기보다 큰 index를 참조하려고 하면 발생하는 에러

    --> 정해진 배열의 크기보다 큰 index를 참조하지 않도록 예방하는 코드가 필요하다.

     

    ▶ 처음에 이를 생각하지 않아서 런타임 에러가 발생했고 문제 풀이에 실패했었다.

     

    >> 풀이

    1. 문자열을 받아 문자의 배열로 변환하고 답으로 제출할 'count'를 선언
    2. for문을 통해 문자의 배열을 하나씩 점검하여 문제에서 표로 알려준 크로아티아 알파벳이 있는지 확인
      •     크로아티아 알파벳을 변환하여 표기하는 방식의 개수가 적기 때문에 조건문을 통해 하나씩 확인
    3. 크로아티아 알파벳을 확인했다면 i 값을 더해줘서 다시 체크하지 않도록
    4. 크로아티아 알파벳 변환 글자는 최소 2글자기 때문에 가장 마지막 index를 점검한다면 바로 count++ 후, 반복문을 종료하여 IndexOutOfRange를 예방
    5. 크로아티아 알파벳 변환 글자가 3글자인 경우 조건에 들어갈 때 index번호 [i + 2]가 배열의 크기보다 작을 때만 조건에 들어가도록 처리하여 IndexOutOfRange를 예방

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();
            char[] characters = input.ToCharArray();
            int count = 0;
    
            for (int i = 0; i < characters.Length; i++)
            {
                if (i == characters.Length - 1)
                {
                    count++;
                    break;
                }
    
                if (characters[i] == 'c')
                {
                    if (characters[i + 1] == '=' || characters[i + 1] == '-')
                    {
                        i++;
                    }
                }
                else if (characters[i] == 'd')
                {
                    if (i + 2 < characters.Length && characters[i + 1] == 'z' && characters[i + 2] == '=')
                    {
                        i += 2;
                    }
                    else if (characters[i + 1] == '-')
                    {
                        i++;
                    }
                }
                else if (characters[i] == 'l' || characters[i] == 'n')
                {
                    if (characters[i + 1] == 'j')
                    {
                        i++;
                    }
                }
                else if (characters[i] == 's' || characters[i] == 'z')
                {
                    if (characters[i + 1] == '=')
                    {
                        i++;
                    }
                }
                count++;
            }
            Console.Write(count);
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 25206번: 너의 평점은  (2) 2025.08.27
    [C#] 1316번: 그룹 단어 체커  (0) 2025.08.25
    [C#] 1157번: 단어 공부  (0) 2025.08.20
    [C#] 10988번: 팰린드롬인지 확인하기  (0) 2025.08.19
    [C#] 2444번: 별 찍기 - 7  (0) 2025.08.18