TIL: 백준C# 10809번 - 알파벳 찾기

김보근·2025년 2월 5일

백준

목록 보기
10/62

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

TIL: 백준 10809번 - 알파벳 찾기

오늘은 백준 10809번 - 알파벳 찾기 문제를 풀었다. 처음에는 문제를 이해하는 데 어려움을 겪었지만, ASCII 값을 활용한 인덱스 계산을 이해하고 나니 해결할 수 있었다.

문제 이해

주어진 단어에서 알파벳 a~z가 처음 등장하는 위치를 찾는다.

만약 해당 알파벳이 단어에 포함되지 않으면 -1을 출력한다.

입력: 단어 (소문자로만 구성)

출력: 알파벳 a~z의 등장 위치 (없으면 -1)

예제

입력: baekjoon
출력: 1 0 -1 -1 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 3 -1 -1 -1 -1 4 -1 -1 -1 -1 6 -1

해결 방법

이 문제를 해결하기 위해 아래의 접근 방식을 사용했다.

각 알파벳의 등장 위치를 저장할 배열 positions[26]을 -1로 초기화한다.

입력 문자열을 순회하면서, 각 문자가 처음 등장한 위치를 저장한다.

알파벳 'a'를 기준으로 ASCII 값을 계산하여 배열의 인덱스를 구한다.

positions 배열을 출력한다.

핵심 아이디어: index = input[i] - 'a'를 사용하면 알파벳을 0~25 범위의 숫자로 변환할 수 있다.

코드 (C#)

using System;

class Program
{
    static void Main()
    {
        string input = Console.ReadLine();
        int[] positions = new int[26];
        
        // 배열을 -1로 초기화
        for (int i = 0; i < 26; i++)
        {
            positions[i] = -1;
        }
        
        // 입력 문자열 순회
        for (int i = 0; i < input.Length; i++)
        {
            int index = input[i] - 'a'; // 'a'를 기준으로 인덱스 계산
            if (positions[index] == -1) // 처음 등장한 경우에만 저장
            {
                positions[index] = i;
            }
        }
        
        // 결과 출력
        Console.WriteLine(string.Join(" ", positions));
    }
}

깨달은 점

ASCII 값을 활용하면 문자 간 연산이 가능하다! 'e' - 'a' 하면 4가 나오는 원리를 알게 되었다.

배열 초기화가 중요하다. 등장하지 않은 알파벳은 -1을 출력해야 하므로, 먼저 배열을 -1로 채우는 것이 핵심이다.

처음 등장한 위치만 저장해야 한다. 이후에 같은 문자가 나와도 업데이트하지 않아야 한다.

이 문제를 풀면서 문자열과 배열을 다루는 방법을 확실히 익힐 수 있었다.

profile
게임개발자꿈나무

0개의 댓글