반응형

문제 출처 :

 

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


알고리즘 분석 :


문제 해결에 필요한 사항

1. 알파벳 확인 방법

2. 대문자를 소문자로 바꾸는 방법


공백, 숫자, 특수 문자를 제외하고 얼마나 다양한 알파벳이 나왔는지를 구하면 된다. 대소문자는 하나의 문자로 처리한다.

 ex) 'A' == 'a'


즉, 알파벳만 찾아내야 하는 것이고, 그 알파벳 또한 대문자와 소문자를 구분하지 않는다고 되어있다.


주석을 통해 알고리즘에 대한 것을 모두 설명해 두었다.


소스 코드 : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
char arr[251];
int ans[150= { 0, };
int cnt = 0;
 
void clear()
{
    for (int i = 0; i < 250; i++)
        arr[i] = { '\0' };
 
    for (int i = 0; i < 150; i++)
        ans[i] = 0;
 
    cnt = 0;
}
 
int main()
{
    while(1)
    {
        clear(); // 계속 초기화 해주는 함수
        gets(arr); // 문자열을 받아낸다
 
        if (strcmp(arr, "#"== 0// 비교시 같을 때
            return 0;
 
        else
        {
           
            for (int i = 0; arr[i] != '\0'; i++)
            {
                // 문자열의 모든 대문자를 소문자로 변환 
                arr[i] = tolower(arr[i]);
                // 그리고 그 소문자에 해당하는 아스키 번호의 배열에 ans++;
                // 예를들어 ans[a]혹은 ans[A]면 ans[97]로 변환 후 +1
                ans[arr[i]]++;
            }
 
            // a - z까지 아스키 값에 해당하는 배열 번호를 관찰하여
            // 0이 아니면 알파벳이 존재하니 cnt++;
            for (int i = 97; i <= 122; i++)
            {
                if (ans[i] != 0)
                    cnt++;
            }
 
            cout << cnt << endl;
        }
    }
 
    return 0;
}
 
//                                                        This source code Copyright is Crocus 
//                                             Do you want to see more contents? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[1350번] 진짜 공간  (0) 2016.08.30
[11650번] 좌표 정렬하기  (0) 2016.08.22
[10773번] 제로  (0) 2016.08.14
[2004번] 조합 0의 개수  (0) 2016.08.12
[11931번] 수 정렬하기 4(Quick Sort, merge Sort, etc.)  (0) 2016.08.10