본문 바로가기

프로그래밍지식/알고리즘

백준 10808 알파벳개수 C++

https://www.acmicpc.net/problem/10808

 

 

 

알파벳의 개수를 구하는 알고리즘 문제다. 문자열을 받은 다음 문자열의 알파벳을 카운팅한거 세어준다. 카운팅된걸 배열로 받아주고 그다음 출력을 해주면 되는 간단한 문제이다. 물론 나는 문제푸는데 1시간넘게 걸렸따 ㅠㅠ 아직 실력도 부족하고 맞긴했지만 썩 이쁘지않은 코드다. 내가한코드와 큰돌님이 정답코드예제를 같이 올린다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<bits/stdc++.h>
using namespace std;
int a[26],cnt;
string s;
 
int main() {
    cin >> s;
    
    for(int i=0; i<s.length(); i++)
    {
        cnt = (int)s[i] - 97;
        a[cnt]++;
    }
    
    for(int i=0; i<26; i++)
    {
        cout << a[i] << " ";
    }
    
    
    return 0;
}
cs

 

1.간단히 설명하면 string값을 받는다.

2.반복문을돌면서 string배열의 요소의 각 소문자알파벳을 아스키값으로 바꾼다. 그리고 97을 빼준다 (97은 소문자 a이다)

3.미리 선언해둔 a배열 (참고로 26은 a~z의 길이다) 에 cnt값을 넣어서 증가시켜준다. 

4. 이후에 반복문을 통해 a배열을 출력한다.

 

난 이렇게 했고 큰돌님의 코드는 아래와같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<bits/stdc++.h>
using namespace std;  
typedef long long ll;  
string str; 
int cnt[26];
int main(){
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    cin >> str; 
    for(char a : str){
        cnt[a - 'a']++;
    }
    for(int i = 0; i < 26; i++cout << cnt[i] << " ";
     
    return 0
}
cs

 

훨씬 간결하다. 그냥 char로 반복문 돌린담에 cnt배열 증가시켜주면 되는구나. 많이배운다.

 

 

 

 

 

 

 

 

오늘도 노력한 내게 행운이 깃들기를