해당 문제를 풀기 위해 필요한 사전 지식으로는 아스키코드와 배열정도일 것이다. 당장에 구글에만 쳐봐도 정답 코드가 넘쳐난다.
그러던중 바킹독님의 풀이가 유독 눈에 띄어서 정리할 겸 가져와봤다.
#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
'알고리즘' 카테고리의 다른 글
Restricted Structure_STACK(스택) (0) | 2023.11.05 |
---|---|
연결 리스트/Linked list (1) | 2023.11.02 |
시간, 공간 복잡도 (1) | 2023.10.27 |
완전 탐색 - 브루트 포스(Brute Force) (0) | 2022.08.30 |
백준#2609 GCD알고리즘 (유클리드 호제법) (0) | 2022.08.21 |