티스토리 뷰

<설명>

한 단어에서 각각의 알파벳 개수를 세는 프로그램.

입력은 알파벳 문자로만 이루어져 있다.

알파벳을 셀 때, 대소문자는 구분하지 않는다.


적어도 1번 이상 나타나는 알파벳에 대해서만 출력한다.

출력은 알파벳 순서로 이루어져야 하며, 알파벳과 그 개수를 출력한다.


<Input>

첫번째 입력은 1과 10^5사이의 정수 N

두번째 입력은 N자리 알파벳 문자열


<Output>

한줄씩, 각각의 알파벳과 그 개수 (소문자로 출력)

알파벳과 숫자 사이에 공백이 있어야 하며, 알파벳 순서로 출력한다.


<소스코드>

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
#include <stdio.h>
 
char arr[100005];
// counting each alphabet
int alp[30]; 
 
int main (void)
{
    char alpa;
    int N;
    int i;
    scanf("%d ",&N);
//insert char into array, convert it to lower
    for(i=0; i<N; i++)
    {
        scanf("%c",&arr[i]);
        if (arr[i]>='A'&&arr[i]<='Z')
                arr[i]=arr[i]-('A'-'a');
    }
//make all apl[i] 0
    for(i=0; i<29; i++)
        alp[i]=0;
//count each alphabet
    for(i=0; i<N; i++)
    {
        alp[(int)(arr[i]-'a')]++;
    }
//print each alphabet
    for(i=0; i<29; i++)
    {
        alpa= 'a'+i;
        if(alp[i]>0)
            printf("%c %d\n",alpa,alp[i]);
    }
return 0;
}
cs


<설명>

%c를 scan함으로써, 한글자 한글자씩 어레이에 저장한다.

저장할 때부터 대문자이면 소문자로 바꿔서 저장한다.


for loop을 이용해서 alp를 초기화한다. 이거 쓸 때는 몰랐는데 그냥 선언할 때 int apl[30]={0,}; 이렇게 하면 0으로 초기화된다고 한다. alp는 알파벳의 개수를 셀 때 사용할 것이다. alp[0]은 a의 개수, alp[1]은 b의 개수.... 이런 식이다.


for loop를 돌면서

alp[(int)(arr[i]-'a')]++;

이전에 저장한 arr값에서 'a'만큼 빼면 어떻게 될까? 'a'는 0이 될 것이고, 'b'는 1이 될 것이다. alp를 선언할 때 계획했던 index와 정확히 맞아떨어진다. 혹시 모르니 (int)로 데이터형을 명시한다.

for loop을 다 돌면 지금까지 입력된 모든 문자를 다 세 alp에 저장한다.


alpa는 개수를 제시하기 전에 표시할 알파벳이다. 'a'+i로 해놓으면 i가 증가하면서 모든 알파벳을 출력할 수 있다. 알파벳은 28개니까 i<29로 해놓는다.


근데 등장하지 않는 알파벳은 출력하면 안되니까

if(alp[i]>0)

조건을 만족할 때만 출력하도록 한다.


끄읏

'공부 > 2018-2 프로그래밍연습' 카테고리의 다른 글

12. Closest Distance Points  (1) 2018.12.11
11. Maximum Sum Subarray  (0) 2018.12.11
09. Print in Reverse  (0) 2018.12.11
08. Multiplication Table  (0) 2018.12.11
07. Conversion  (0) 2018.12.11
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
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
글 보관함