백준 알고리즘 - 10808번 알파벳 개수 문제입니다.
(참고 - https://www.acmicpc.net/problem/10808 )
코드 )
#include <stdio.h>
#include <string.h>
int main() {
char arr[BUFSIZ];
int tmp[BUFSIZ], cnt[BUFSIZ]={0,};
int i, j;
scanf("%s", arr);
for(i = 0; i < strlen(arr); i++)
tmp[i] = arr[i] - 97;
for(i = 0; i < strlen(arr); i++)
for(j = 0; j < 26; j++)
if(tmp[i] == j)
cnt[j]++;
for(i=0; i < 26; i++)
printf("%d ", cnt[i]);
printf("\n");
return 0;
}
- 길이를 계산하는 것이 귀찮아서.. strlen함수를 사용하려고 string.h 를 추가하였습니다.
먼저 char형 배열 arr에 문자열을 입력받습니다. 다음으로 char형 배열의 길이를 계산하여 길이만큼 반복합니다.
arr의 인덱스 0부터 차례대로 arr[0]-97을 하여 int형 배열 tmp에 저장하게 되면, 아스키코드를 참고하면 문자 a는 정수 97입니다.
즉 a - 97을 하게되면 정수로 0 이 됩니다. 이를 이용하여 arr[0] - 97을 한 후 int형 배열에 저장하게 되면 1의 값이 tmp[0]에 저장됩니다. (arr[0]이 b 이므로)
이와 같은 방법으로 tmp배열에 문자를 숫자로 바꾸어 저장해줍니다.
이후에 다시 한 번 for문을 이용하여 문자열의 길이만큼 반복을 하는데, 내부 for문에서는 알파벳의 총 문자의 갯수가 26개 이므로 (a~z) tmp에 저장된 값과 j를 비교하며 같다면 cnt의 해당 인덱스에 카운트를 누적하여 더해줍니다.
(알기 쉽게 예를 들면 처음에 cbab라는 문자열을 입력받았다면, tmp[0]=2, tmp[1]=1, tmp[2]=0, tmp[3]=1 라는 값이 들어 있을 것입니다. 그리고 배열 cnt에는 cnt[0]=1, cnt[1]=2, cnt[2]=1 의 값이 저장될 것입니다.)
최종적으로 배열 cnt에 저장된 값들을 출력해주면 됩니다.
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 10828번 : 스택 (0) | 2016.05.14 |
---|---|
백준 알고리즘 - 10817번 : 세 수 (1) | 2016.05.14 |
백준 알고리즘 - 10798번 : 세로읽기 (0) | 2016.05.14 |
백준 알고리즘 - 9012번 : 괄호 (0) | 2016.05.14 |
백준 알고리즘 - 2577번 : 숫자의 개수 (0) | 2016.05.14 |
WRITTEN BY