DY의 세상구경

[Baekjoon Online Judge] 10809 알파벳 찾기 (C++, 문자열) 본문

IT/ALGORITHM

[Baekjoon Online Judge] 10809 알파벳 찾기 (C++, 문자열)

토미존스 2025. 6. 22. 08:43
반응형

#define _CRT_SECURE_NO_WARNINGS
#include    <iostream>
#include	<math.h>
#include	<stdlib.h>
using namespace std;


int main()
{
	char S[100];
	scanf("%s", &S);
	
	// a~z 가 처음 등장하는 위치 -1 

	int len = 0;
	while (true)
	{
		if (S[len] == '\0')
			break;
		len++;

	}

	// length 구한 다음 a to z 로 시작 
	int a_count[26] = { -1, }; // -1 로 배열 전체를 초기화
	for (int i = 0; i < 26; ++i)
	{
		a_count[i] = -1;
	}
	
	for (int i = 0; i < len; ++i)
	{
		int alphabet_index = int(S[i]) - 97;
		if (a_count[alphabet_index] == -1)
		{
			a_count[alphabet_index] = i;
		}
	}

	for (int i = 0; i < 26; ++i)
	{
		printf("%d ", a_count[i]);
	}
	printf("\n");

	return 0;
}

벌써 주석 달고 그럴정도는 아니었는데.. 오랜만에 C를 하다 보니 헷갈려서 검색도 하고 주석도 달고 했다.
우선 입력받은 문자 길이 체크는 \0가 나올떄까지 해주었고, 알파벳 갯수만큼인 26개 길이의 배열을 만들어주었다.
보통 배열을 0으로 초기화하려면 { 0, } 하면 뒤에도 자동으로 0으로 초기화가 되는데 다른 숫자는 안되는것 같아서 for문을 돌면서 -1로 초기화 해 주었다.
입력받은 문자의 각 위치에 있는 알파벳에서 소문자 a 기준인 97을 빼주면 a=0이 되고 바로 문자가 나타나는 위치 i를 배열에 넣으면 된다.

반응형