해바

10809) 7. 문자열 : 알파벳 찾기 본문

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;
}
Comments