#10809: 알파벳 찾기
문제:
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
입력:
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
풀이:
- 이 문제를 풀기 전에 #10808: 알파벳 개수를 먼어 풀어보거나 풀이를 읽어보기를 권한다. ASCII 개념을 알아야 하기 때문에기도 하고 거의 똑같은 문제인데 배열 초기화 해주고 조건 한개만 추가해주면 풀 수 있기 때문이다.
- 이 문제는 알파벳 개수 문제와 개념은 똑같지만 특정 알파벳의 위치를 출력하면 된다. 우선 알파벳 개수와 다르게 존재하지 않는 문자는 -1 처리를 해줘야 되기 때문에 alphabet 배열을 모두 -1로 초기화를 위해 fill_n을 이용해준다. fill_n(배열, 배열 시작부터 몇개의 값을 초기화 할지, 무슨 값으로 초기화 할지) 이렇게 적어주면 된다.
- 배열을 초기화 한 뒤에는 배열에 맞는 인덱스에 그 문자의 현재 위치인 i를 배열에 저장해주면 된다. 단, 그 문자의 값이 -1일 때만 배열에 저장해준다. 그 이유는 예시처럼 ‘o’가 2개인 경우에는 첫번째 ‘o’의 인덱스를 저장해줘야 되기 때문이다. 따라서 이미 값이 있는 경우는 무시해줄 수 있도록 조건문을 추가한 것이다.
코드:
#include <iostream>
using namespace std;
int main(){
string s;
int alphabet[26];
//배열 값 -1로 초기화
fill_n(alphabet, 26, -1);
//입력
getline(cin, s);
//알파벳에 맞는 인덱스 저장
for(int i = 0; i < s.size(); i++){
//만약에 이미 값이 존재하면 넘김
if(alphabet[s[i]-'a'] == -1) alphabet[s[i]-'a'] = i;
}
//출력
for(int i = 0; i < 26; i++){
cout << alphabet[i] << " ";
}
}
Leave a comment