1 minute read

백준 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