기타지식들/알고리즘퀴즈

백준 10809 알파벳찾기

원원 2020. 5. 17. 12:10

문제

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

출력

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

예제 입력 1 

baekjoon

예제 출력 1 

1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1

























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




문제해결순서

1) 배열에 -1을 알파벳 개수(26개)만큼 넣어준다

2) 입력받은 문자열에나온 알파벳에 따라서 배열에 0부터 값을 증가시켜서 넣어준다

3) 배열을 출력한다




알아야 할 지식

1)

아스키코드값 a는 97이고 b는 98이고 c는 99이다

아스키코드값 a-a를하면 0이나오고 b-a를하면 1이 나온다

그러므로 배열 0번째자리의 값은 a로 정의 할 수 있다


2)

*(배열명+정수) = 배열명[정수]




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
#include <stdio.h> 
#include <string.h> 
 
int main(void
    char array[26],i,j=0;
    char string[100];
    scanf("%s",string);
    memset(array,-1,26);
 
    for(i=0 ; i<100 ; i++)
    {
        if(*(string+i)=='\0')
            break;
        
        if(array[*(string+i)-'a'] == -1)
            array[*(string+i)-'a']=j;
        j++;
        
    }
    
        for(i=0; i<26 ; i++)
        {
            printf("%d",array[i]);
            printf(" ");
        }
}
 
 



9번째줄 : 배열을 -1로 초기화시켜준다.


11~20번째줄 : 문자열을 검사하고 나온 문자에 따라서 0부터 순서대로 넣어주는것이다.


13~14번째줄 : 배열의 끝이면 탈출시켜준다.


16번째줄 :         if(array[*(string+i)-'a'] == -1)

*(string+i)-'a'를 하면 문자의 알파벳의 순서가 나온다.

ex) *(string+i)가 c라고 한다면 'c'-'a'이므로 99-97=2이다.

array[2]는 c의 자리가 맞다.

0 1 2

a b c


22~26번째줄 : 배열의 값을 출력해준다.







'기타지식들 > 알고리즘퀴즈' 카테고리의 다른 글

백준 15649번 N과 M  (0) 2021.01.23
백준 1978 소수찾기  (0) 2020.05.25
백준 1712 손익분기점  (0) 2020.05.17