코딩테스트 | (c++) 백준 10809번: 알파벳 찾기

trevor1107·2021년 5월 26일
0

✅문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

문제 보기

🎹입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

📢출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

✍풀어보기

#include <iostream>
#include <cstring> // 백준에서 strlen 함수를 사용하려면 추가해주어야한다.

using namespace std;

#define MAX 101
#define START 'a' // 아스키코드 97
#define END 'z' // 아스키코드 122
#define ALPHABET_SIZE END - START + 1 // 알파벳 개수는 26이다. 122 - 97 + 1 = 26

int main() {

	// 단어 S를 입력 받는다. 길이는 100을 넘지 않고 알파벳 소문자로만 이루어져있다.
	char s[MAX];
	cin >> s;

	int alphabetChecker[ALPHABET_SIZE];
	// 배열의 모든 값을 -1로 채운다.
	fill_n(alphabetChecker, sizeof(alphabetChecker) / sizeof(alphabetChecker[0]), -1);

	int ASCII = 0, index = 0; // 아스키코드 담을 변수, 배열 인덱스 변수
	for (int i = 0; i < strlen(s); i++)
	{
		ASCII = (int)s[i];

		// 예외처리 'a'~'z'까지 확인
		if (START <= ASCII && ASCII <= END) {
			index = ASCII - START;
			// 찾은 알파벳의 제일 앞에있는 인덱스를 저장해야하므로 예외처리
			if(alphabetChecker[index] == -1) 
				alphabetChecker[index] = i;
		}
	}

	// 출력
	for (int i = 0; i < ALPHABET_SIZE; i++)	{
		cout << alphabetChecker[i] << ' ';
	}

	return 0;
}

우선 처음 컴파일 에러가 떳는데 이유는, 저번에도 다뤘지만 strlen함수를 사용하려면 백준 컴파일러에서는 #include <cstring>을 추가해주어야한다.



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글