Seung's Learning Record

알파벳 개수 세기 #10808 본문

알고리즘

알파벳 개수 세기 #10808

70_0ewd 2023. 11. 1. 19:37

해당 문제를 풀기 위해 필요한 사전 지식으로는 아스키코드와 배열정도일 것이다. 당장에 구글에만 쳐봐도 정답 코드가 넘쳐난다. 
그러던중 바킹독님의 풀이가 유독 눈에 띄어서 정리할 겸 가져와봤다.

#include <iostream>
#include <vector>

using namespace std;

int main(void){
    int arr[26]={0};
    string s;
    cin >> s;

    for(auto c : s)
        arr[c-'a']++;
    
    for(auto i : arr)
        cout << i << " ";
}

대부분 알파벳을 배열 형식으로 받았던데 난 그냥 string으로 입력받았다. string의 알파벳 개수 정보를 받을 arr배열은 0으로 초기화를 꼭 해야함을 잊지말자.
첫번째 for문을 보면 c가 string을 돌면서 각 요소들의 값을 읽어들인다. 그후 각 요소에 'a'의 아스키코드값을 빼주게 되면 해당 인덱스의 요소 값이 1씩 증가하게 된다. 
만일 c에 'f'라는 값이 들어올경우, f의 아스키코드 값에서 a의 아스키코드값이 빠져나가 arr[5]의 값이 1 증가한다. 이때 arr[]배열은 순차적으로 a,b,c,d...,z를 뜻하는 것이므로 arr[5]는 f를 뜻하는것이 된다.

해당 코드를 사용할경우 문자열의 수만큼 for문을 돌릴필요가 없어 시간복잡도가 훨씬 줄어들게된다.

 

 

 

출처 : https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x03/solutions/10808.cpp