
이번 문제는 문자열 S가 주어졌을 때 a ~ z까지 각 알파벳이 처음 등장하는 위치를 출력하는 문제이다.
만약 해당 알파벳이 문자열에 존재하지 않는다면 -1을 출력한다.
C#에서 char는 내부적으로 ASCII 코드 값을 가지는 숫자 타입이기 때문에 문자 간 연산이 가능하다.
'a' - 'a' = 0 (97 - 97 = 0)
'b' - 'a' = 1 (98 - 97 = 1)
int index = S[i] - 'a';
위와 같이 'a'를 기준으로 빼주면 알파벳을 배열의 인덱스 값으로 변환할 수 있다.
이 방법을 사용하면 알파벳을 배열 인덱스로 변환하여 각 문자의 등장 위치나 개수를 효율적으로 관리할 수 있다.
//백준 10809번 알파벳 찾기
string S = Console.ReadLine();
int[] alphabet = new int[26];
//모든 알파벳의 값에 기본값인 -1을 할당
for(int i = 0; i < alphabet.Length; i++)
{
alphabet[i] = -1;
}
//입력받은 문장의 길이만큼 반복하며 검사
for (int i = 0; i < S.Length; i++)
{
// 현재 문자(S[i])를 배열 인덱스로 변환
// 'a'를 기준으로 빼면 a=0, b=1, c=2 ... z=25
// 알파벳 문자를 배열 인덱스(0~25)로 변환
int index = S[i] - 'a'; //알파벳을 배열의 인덱스(0~25)로 변환하기 위해서 'a'를 뺀다.
// 해당 알파벳이 아직 등장하지 않았다면
// 현재 문자열에서의 위치(i)를 저장
if (alphabet[index] == -1)
alphabet[index] = i;
}
//모든 알파벳 배열을 순회해 모든 값 출력
foreach(int value in alphabet)
{
Console.Write(value + " ");
}

'코딩 테스트 > 백준' 카테고리의 다른 글
| 백준 - [단계별로 풀어보기 문자열] 1152 단어의 개수 (0) | 2026.03.11 |
|---|---|
| 백준 - [단계별로 풀어보기 문자열] 2075 문자열 반복 (0) | 2026.03.10 |
| 백준 - [단계별로 풀어보기 문자열] 11720 숫자의 합 (0) | 2026.03.07 |
| 백준 - [단계별로 풀어보기 문자열] 11654 아스키 코드 (0) | 2026.03.07 |
| 백준 - [단계별로 풀어보기 문자열] 9086 문자열 (0) | 2026.03.07 |