Coding/BOJ

[BOJ 백준] 10809 - 알파벳 찾기 (C++)

Dev_Klare 2023. 11. 12. 21:06

문제 바로가기

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


관련 알고리즘

- ASCII 코드


정답 및 해설

알파벳 소문자로만 이루어진 문자열을 받아서 알파벳이 몇번째에 처음으로 등장하는지 묻는 문제이다.

알파벳의 위치를 저장할 배열을 만들고, 알파벳이 없는 경우 -1을 출력해야 하므로 먼저 -1로 초기화 시킨다.

그 후 입력받은 문자열의 알파벳을 하나씩 살펴보면서 해당 알파벳이 처음 등장했다면 해당 인덱스값으로 설정한다.

문자별 배열의 순서는 ASCII 코드값으로 문자열의 문자를 변수 s에 저장하면 s-'a' 번째 알파벳으로 계산할 수 있다.


C++

더보기
#include<bits/stdc++.h>
using namespace std;
int main(){
    string str;
    int alpha[26],i;
    memset(alpha,-1,sizeof(alpha));
    cin>>str;
    for(i=0; i<str.length(); i++)
        if(alpha[str[i]-'a']==-1)
            alpha[str[i]-'a']=i;
    
    for(i=0; i<26; i++)
        cout<<alpha[i]<<' ';
}

 

Line 해설
4~5 입력받을 문자열 str과 알파벳의 등장 위치를 저장할 배열 alpha를 정의했다.
6 memset 함수를 사용하여 alpha 배열의 값을 모두 -1로 초기화했다.1)
7 string타입 변수 s에 문자열을 입력받는다.
8~10 변수 i를 0부터 시작해서 문자열(str)의 길이(.length())까지 반복한다.
str[i]는 str문자열의 i번째 문자를 나타내므로 str[i]-'a'는 해당 문자와 'a'의 ASCII 코드값 차이가 된다.
즉, alpha 배열의 해당 문자의 인덱스가 되므로 alpha[str[i]-'a']로 하여 등장 위치를 확인할 수 있다.
if 조건문으로 alpha 배열의 해당 문자 위치가 -1인 경우 처음 등장한 문자로 판단하여 값을 i번째로 설정한다.
12~13 for 반복문으로 i를 0부터 26까지 반복하며 각 알파벳의 최초 등장위치를 출력한다.

1) 배열을 초기화하는 방법에는 여러가지가 있다. 값 지정, memset, fill, fill_n 등이 있는데 추후에 다루기로 한다.

memset(변수명, 값, 메모리크기) : (변수명)에서 (메모리크기)만큼의 메모리를 (값)으로 세팅