이번에는 백준 10808번 알파벳 개수 문제를 풀어보았습니다.
이 문제는 문자열에서 각 알파벳이 몇 번 등장했는지를 세는 문제입니다.
알파벳 소문자로만 이루어진 단어 S가 주어집니다.
이때 a부터 z까지 각 알파벳이 몇 번 포함되어 있는지 공백으로 구분해 출력하면 됩니다.
예를 들어 문자열에 a가 2번, b가 0번, c가 1번 들어 있다면
그 개수를 순서대로 출력하는 방식입니다.
알파벳은 소문자 a부터 z까지 총 26개로 고정되어 있습니다.
따라서 크기가 26인 배열을 하나 만들어두고, 문자열을 순회하면서 각 문자의 위치에 맞는 값을 증가시키면 됩니다.
문자를 숫자 인덱스로 바꾸는 방식은 다음과 같습니다.
'a' - 'a' → 0'b' - 'a' → 1'c' - 'a' → 2이 원리를 이용하면 배열의 각 칸이 해당 알파벳의 등장 횟수를 저장하게 됩니다.
#include <bits/stdc++.h>
using namespace std;
string s;
int alphabet[26] = {0};
void solve() {
for (char c : s) {
alphabet[c - 'a']++;
}
}
int main() {
cin >> s;
solve();
for (int i = 0; i < 26; i++) {
cout << alphabet[i] << " ";
}
}
s를 입력받는다.alphabet을 준비한다.c - 'a' 위치의 값을 1 증가시킨다.이 문제에서는 배열을 사용해 각 알파벳의 개수를 셌습니다.
문자열에서 어떤 값의 등장 횟수를 세는 문제는 보통 다음 두 방식으로 접근할 수 있습니다.
이번 문제처럼 대상이 a부터 z까지처럼 범위가 고정되어 있고 인덱스로 바로 바꿀 수 있는 경우에는 배열이 더 간단합니다.
반대로 문자열이나 숫자 범위가 일정하지 않거나, 값이 띄엄띄엄 등장하는 경우에는 Map을 사용하는 방식도 생각할 수 있습니다.