백준 10809 : 알파벳 찾기
문제 링크
https://www.acmicpc.net/problem/10809
문제 내용
(요약) 길이가 최대 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] == 100) printf("-1 ");
else printf("%d ", alpha[i]);
}
printf("\n");
return 0;
}
|
cs |
'백준 Baekjoon' 카테고리의 다른 글
[C언어] 백준 4949 : 균형잡힌 세상 (3) | 2020.07.24 |
---|---|
[JAVA] 백준 4228 : The Dragon of Loowater (0) | 2020.07.23 |
[C언어] 백준 2902 : KMP는 왜 KMP일까? (0) | 2020.07.22 |
[C언어] 백준 2822 : 점수 계산 (0) | 2020.07.21 |
[C언어] 백준 6378 : 디지털 루트 (0) | 2020.07.21 |