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(변수명, 값, 메모리크기) : (변수명)에서 (메모리크기)만큼의 메모리를 (값)으로 세팅