백준 Baekjoon

[C언어] 백준 10809 : 알파벳 찾기

sujo 2020. 7. 22. 14:23

백준 10809 : 알파벳 찾기

 

문제 링크

https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

 

문제 내용

(요약) 길이가 최대 100인 단어를 입력받아 각각의 알파벳에 대해서 처음 등장하는 위치를 공백으로 구분하여 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

 

Idea

이 문제는 한 문장의 알파벳 빈도수를 구하는 알고리즘을 할 줄 안다면 쉽게 구현할 수 있다.

먼저 크기가 26인 정수형 배열을 선언하고 초기화해준다. 각 인덱스는 a ~ z의 위치를 의미한다.

ex) 0 = a, 1 = b, ...

 

해당 문자의 위치를 저장해주기 위해 문자에서 a를 빼준다. 그렇다면 문자의 범위는 최소 0부터 최대 25가 될 것이다. 이를 이용하면 원하는 알파벳 인덱스에 문자의 위치를 기록할 수 있다.

  • 문자 - 'a' 

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <string.h>
 
int main() {
    char word[101];
    int alpha[26];
    scanf("%s", word);
 
    int i, idx;
    //alpha 초기화
    for (i = 0; i < 26; i++) {
        alpha[i] = 100;
    }
 
    //각 알파벳이 처음 등장하는 위치 탐색
    for (i = 0; i < strlen(word); i++) {
        idx = word[i] - 'a';
        if (alpha[idx] > i)
            alpha[idx] = i;
    }
 
    //출력
    for (i = 0; i < 26; i++) {
        if (alpha[i] == 100printf("-1 ");
        else printf("%d ", alpha[i]);
    }
    printf("\n");
 
    return 0;
}
cs