43. C++ 백준 10809 번 알파벳 찾기
안녕하세요! 코딩하는 덕구입니다!
한 단어에서 각 알파벳이 처음 등장하는 위치를 찾는 문제인 C++ 백준 10809 번 입니다!
문제
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
출력
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
#include <iostream>
#include <string>
using namespace std;
int main(){
int apbt[26]; //알파벳 위치 및 등장 여부 확인용 배열
fill_n(apbt,26,-1); // fill_n(배열명, 시작부터 n번까지, 채울 성분)
// fill_n은 배열을 특정 성분으로 채울 때 사용
string word;
cin>>word;
for(int i = 0; i<word.length(); i++){
if(apbt[word[i] - 'a'] == -1){ //word[i] -'a'로 a면 0, b면 1 순서대로 넘버링
//그 넘버가 -1이면 (한번도 안나오면)
apbt[word[i] - 'a'] = i; //넘버 = word[i] 의 현재 위치
}
}
for(int i =0; i<26; i++)
cout<<apbt[i]<<" "; //각 알파벳 등장 위치, 여부 출력
return 0;
}
알파벳 위치, 알파벳 등장 여부를 넣을 배열 apbt 선언하고, fill_n 함수를 이용해 -1로 apbt의 성분을 가득 채웠습니다!
apbt[ word[i] - 'a' ] 에서 문자 - 문자 == 문자의 아스키 - 문자의 아스키 가 되므로,
word[i] - 'a' 는 word[i] 가 a 면 0이고, word[i] 가 b 면 1, c면 2 ... 이렇게 올라갑니다!
문자에 맞는 번호를 찾아서 for 문을 돌다가 어떤 문자가 처음 나왔을 때 (apbt[word[i] - 'a' ] == -1)
그 문자가 처음 나온 위치를 apbt 배열 안에 넣어줬습니다! (apbt[word[i] - 'a' ] = i )
자연스럽게 문자가 한번이라도 나오면 값이 -1이 아니기 때문에
apbt 배열에는 알파벳의 처음 나온 위치만 저장이 되겠죠!
이제 순서대로 apbt 배열을 출력만 하면 됩니다!
C++ 백준 10809 번 이었습니다! 감사합니다~!