굉장히 낮은 난이도의 문제이다.
배열을 전역변수로 선언하고 0으로 초기화했다.
그리고 배열을 알파벳의 그릇이라고 생각하고, 배열의 처음부터 차례대로 a-z까지 라고 생각하고 사용했다.
a를 입력받으면 arr[0]를 증가시키고 이런식이다.
arr[c - 'a'] 에서 눈여겨 볼 것은 c-'a'가 어떠한 숫자로 바뀐다는 것인데, 문자 a는 10진수로 변환할시 97을 뜻하고, c는 반복을 돌면서 어떠한 문자를 값으로 받았을 것이다. 거기서 그 문자에 'a'를 빼주면 97 c가 받은 어느 알파벳의 숫자(아스킥코드)에서 빠져서 0~25의 배열에 차례대로 알파벳들의 순서를 정확히 매기고 숫자를 증가시킬 수 있었다.
A는 65를 뜻하는 것도 기억 해야겠다. 그리고 char 0은 10진수 48이다.
#include <iostream>
using namespace std;
int arr[26];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
string str;
cin >> str;
for(auto c : str){
arr[c - 'a'] +=1 ;
}
for(auto s : arr){
cout << s << " ";
}
return 0;
}
'PS' 카테고리의 다른 글
[C++] 백준 4179번: 불! (0) | 2024.10.27 |
---|---|
[C++] 백준 7576번: 토마토 (0) | 2024.10.26 |
[C++] 백준 2178번: 미로 탐색 (0) | 2024.10.25 |
[C++] 백준 1926번: 그림 (0) | 2024.10.24 |
[C++] 배열 안의 두 수의 합이 100이 되는 짝 찾기를 O(N)에 계산하기 (0) | 2024.10.22 |