목차
백준 단계별로 풀어보기
25.08.21
6단계: 심화 1
2941번: 크로아티아 알파벳
문제 링크 : https://www.acmicpc.net/problem/2941
문제 풀이
>> 문제를 풀기 위해 알아야 할 개념
- 'IndexOutOfRange' 런타임 에러
: 정해진 배열의 크기보다 큰 index를 참조하려고 하면 발생하는 에러
--> 정해진 배열의 크기보다 큰 index를 참조하지 않도록 예방하는 코드가 필요하다.
▶ 처음에 이를 생각하지 않아서 런타임 에러가 발생했고 문제 풀이에 실패했었다.
>> 풀이
- 문자열을 받아 문자의 배열로 변환하고 답으로 제출할 'count'를 선언
- for문을 통해 문자의 배열을 하나씩 점검하여 문제에서 표로 알려준 크로아티아 알파벳이 있는지 확인
- 크로아티아 알파벳을 변환하여 표기하는 방식의 개수가 적기 때문에 조건문을 통해 하나씩 확인
- 크로아티아 알파벳을 확인했다면 i 값을 더해줘서 다시 체크하지 않도록
- 크로아티아 알파벳 변환 글자는 최소 2글자기 때문에 가장 마지막 index를 점검한다면 바로 count++ 후, 반복문을 종료하여 IndexOutOfRange를 예방
- 크로아티아 알파벳 변환 글자가 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 |