반응형
문제 출처 :
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 |