문제
각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
풀이
알파벳 26개를 일일이 비교하므로, 알파벳의 아스키코드를 활용한다.
일치하는 알파벳이 나올 경우 해당 알파벳을 가리키는 배열 요소에 등장위치를 대입한다.
주의! 단어 내 알파벳이 중복될 경우, 등장한 가장 처음 위치를 출력하도록 한다.
풀이 코드
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
cin.tie(NULL); ios_base::sync_with_stdio(false);
string str;
cin>>str;
int arr[26]; //알파벳 26개 배열
fill_n(arr,26,-1);
//소문자 a 아스키코드 97
int alp=97;
for(int i=0;i<str.size();i++)
{
for(int j=0;j<26;j++)
{
if((int)str[i]==alp)
if(arr[j]==-1)
arr[j]=i;
alp++;
}
alp=97;
}
for(int i=0;i<26;i++)
cout<<arr[i]<<" ";
return 0;
}
📌 유의한 점!
단어 내 알파벳이 중복될 경우, 처음위치를 출력하도록 한다.
=> 알파벳 배열의 요소값이 -1일 경우(처음 등장) 등장위치를 대입하도록 조건을 걸어주면 된다.
alp 변수를 97로 초기화해야한다. 다시 a부터 검사할 거니까!
💡 새롭게 알게 된 것!
std::fill_n()
함수 : 배열의 모든 요소를 특정 값으로 반복없이 한 번에 초기화시켜준다.
(자세한 방법은 다음 글에 포스팅 하겠다.)