본문 바로가기

코딩/백준 BOJ

[백준/C언어] 10809번 - 알파벳 찾기

백준 웹사이트 "10809번 - 알파벳 찾기" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

10809번: 알파벳 찾기

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

www.acmicpc.net


소스 코드

#include <stdio.h>
#include <string.h>

int main(void){
    char S[100];
    scanf("%s", S);

    int position[26];
    for(int i=0; i<26; i++){
        position[i] = -1;
    }

    for(int j=0; j<strlen(S); j++){
        char alphabet = S[j];
        //printf("alphabet: %c\n", alphabet);

        if(position[alphabet-'a'] == -1)
            position[alphabet-'a'] = j;
        else
            continue; //break를 쓰면 for문 종료
    }

    for(int k=0; k<26; k++){
        printf("%d ", position[k]);
    }
}

문제 풀이

  Line 5, 6에서는 주어진 단어 S를 입력받습니다. 이때 문제 조건 중, 단어의 길이가 100을 넘지 않는 조건이 있기에 배열의 길이를 100으로 지정하면 충분합니다.

  Line 8 ~ 11은 각 알파벳의 위치를 저장할 배열을 선언 및 초기화합니다. 알파벳의 개수가 배열의 크기가 되며, 알파벳이 단어에 나타나지 않을 경우 '-1'이라는 값을 가지도록 모든 배열 값을 '-1'로 초기화합니다.

  Line 13 ~ 21에서 각각의 알파벳이 처음으로 나타나는 위치를 저장해주는 작업을 진행합니다. 이때 크기 100의 배열인 S를 모두 보지 않고, 입력 문자열의 크기만큼 보고 싶기 때문에 'strlen'함수를 이용하며, 이를 위해 Line 2의 <string.h>를 추가합니다. Line 17, 18에서 alphabet-'a'를 이용하는데, 이는 11720번 문제의 numbers[i]-'0'과 같은 원리입니다. 'position' 배열에서 인덱스 0에 해당하는 알파벳을 'a', 1에 해당하는 알파벳을 'b' 등등으로 만들기 위해 'a'에 해당하는 아스키 코드 만큼 빼주면 충분합니다. 또한, 각 알파벳이 처음 나타나는 위치만 기록하고 싶기 때문에, '-1'일 경우에만 배열의 값을 바꿔줍니다. 만약 -1이 아니라면, 앞 어딘가에서 값이 바뀐 전적이 있다는 것이므로, 넘어가줘도 괜찮습니다. 아래는 백준 웹사이트 "11720번 - 숫자의 합" 문제풀이 링크입니다.

 

[백준/C언어] 11720번 - 숫자의 합

백준 웹사이트 "11720번 - 숫자의 합" 문제풀이입니다. 언어는 C언어입니다. (제출 언어: C99) 문제 11720번: 숫자의 합 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백

loding.tistory.com

  마지막으로 Line 23에서 'position' 배열을 출력하면 원하는 정답을 얻게 됩니다.

반응형