C, C++
10809) 7. 문자열 : 알파벳 찾기
Bacha
2019. 8. 12. 18:53
문제
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
www.acmicpc.net
풀이
아래 주석과 같이 배열을
a[26] = { [ 0 ... 25 ] = -1 }
처럼 초기화한 것이 백준 채점기에서는 컴파일 에러를 냈다. gcc 레퍼런스를 보니 4.1.2 버전부터 추가된 듯한데 백준에서 돌리는 채점기는 gcc 7.3.0 버전이란다. 근데 왜..?
그냥 초기화하는 방식을 C++답게 고쳤다. C++에서는(iostream을 include하면)
std::fill_n(array name, array size, init value);
와 같이 초기화 가능하다.
※아스키코드상으로 대문자는 65 ~ 90, 소문자는 97 ~ 122 에 해당되며 대소문자간 32의 차이가 난다.
//#inlcude "cstdio"
#include "iostream"
using namespace std;
int main() {
// int a[26]{ [ 0 ... 25 ] = -1 };
int a[26];
fill_n(a, 26, -1);
char str('\0');
for(int i(0); str != '\n'; i++) {
str = getchar();
if(a[str - 97] == -1) a[str - 97] = i;
}
for(int i(0); i < 26; i++) printf("%d ", a[i]);
puts("");
return 0;
}