티스토리 뷰
<설명>
한 단어에서 각각의 알파벳 개수를 세는 프로그램.
입력은 알파벳 문자로만 이루어져 있다.
알파벳을 셀 때, 대소문자는 구분하지 않는다.
적어도 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 |