개발/백준

[백준] 10809번. 알파벳 찾기 (C++)

yun000 2023. 6. 15. 02:40

문제 설명

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

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

해결 방식

10808번과 이어지는 문제이다.

#include<iostream>
using namespace std;

int main() {

	string S;
	cin >> S;

	int alphabet[26] = {-1};
	fill_n(alphabet, 26, -1);

	for (int i = 0; i < S.length(); i++)
	{ 
		if (alphabet[int(S[i]) - 97] == -1)
		{ alphabet[int(S[i]) - 97] = i; }
	}

	for (int num : alphabet)
	{ cout << num << " "; }

}


string S; cin >> S;
문자열을 입력받는다

 


int alphabet[26] = {-1}; 알파벳이 처음 어디에 정보를 저장할 배열이다.
fill_n(alphabet, 26, -1); 배열을 전부 -1로 채우는 함수 fill_n()를 사용했다.

 


for (int i = 0; i < S.length(); i++)
{  if (alphabet[int(S[i]) - 97] == -1) { alphabet[int(S[i]) - 97] = i; } }

문자열 길이 S.length() 만큼 반복하며 알파벳을 하나씩 살펴보자

a~z의 아스키코드가 97~122이므로 

int(S[i]) - 97 는 a~z를 0~25의 숫자로 바꿔준다.

따라서 alphabet[0]은 a가 처음 등장하는 위치를 나타낼 것이다.

 

alphabet[int(S[i]-97)]이 -1이라는 것은

정보가 저장된 것이 없다는 것이기 때문에

이 문자열에서 처음 등장하는 알파벳이라는 것이다.

 

즉 이 알파벳이 i번째에 처음 등장한다는 것이므로

alphabet[int(S[i])-97] = i 를 해준다.

 


for (int num : alphabet)
{ cout << num << " "; }
for-each로 alphabet배열의 숫자들을 하나씩 출력해준다.