백준 알고리즘 - 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에 저장된 값들을 출력해주면 됩니다.



WRITTEN BY
SiriusJ

,