[백준] 10809번. 알파벳 찾기 (C++)
문제 설명
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배열의 숫자들을 하나씩 출력해준다.