게임 클라이언트 개발/알고리즘 문제

[알고리즘 2단계] 알파벳 빈도 구하기

주운녕 2020. 7. 23. 11:49

[출처 : Goorm 사이트 - 심심한 튀김]

문제

이 문제는 입력된 문장에 포함된 알파벳의 빈도를 구하고 출력하는 것이 목표입니다. 대소문자 구분 없이 알파벳의 빈도를 구하는 프로그램을 작성하십시오.

 

입력

임의의 문장(최대 80자)

출력

알파벳 별 빈도 수

 


풀이

 

if나 switch문을 사용하면 코드가 너무 길어지니 배열반복문으로 간결히 만들어보자 
1. 출력 부분 코드 - 아스키코드를 사용하여 알파벳의 10진수 값을 이용한다.

 for(int j=0; j<26;j++){
 	printf("%c : \n", j+97);
 }

 

2. 입력 부분 - 공백 포함 문자를 받기 위해 gets함수를 사용한다.

char input[82];
...
gets(input)

 

 

3. 알고리즘

1) if, switch 쓰지 말기.

2) 문자열 배열을 배열 한 요소씩 문자(%c)로 읽어서, 해당 요소 알파벳의 아스키코드 10진수 값을 활용해 알파벳 빈도를 count 한다.

#include <stdio.h>
int main() {
	char input[81];
	int alpha_count[26]={0}; //각 알파벳의 빈도수를 저장하는 배열 (0~25는 a~z)
	int i = 0;
	int alpa=0;
	
	gets(input);	//공백 포함 입력을 위해 gets함수 사용
	
	while(input[i]!=0){ //엔터키 만나면 종료
		if(input[i]>96)		alpa = input[i]-97;	//소문자의 아스키 10진수값의 시작이 (a:97, b:98...)
		else			alpa = input[i]-65;	//대문자의 아스키 코드 10진수값의 시작이 65 (A:65, B:66...)
		alpha_count[alpa] += 1;	//참고로 alpha_count[0] 은 알파벳 a의 빈도수.
		i++;
		alpa=0;
	}
	
	//출력부분
	for(int j=0; j<26;j++){
		printf("%c : %d\n", j+97, alpha_count[j]); //a가 아스키코드로 97 , 
	}
	return 0;
}

 

결과


* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.

* 문제 출처 - level.goorm.io/exam/43086/알파벳-빈도-구하기/quiz/1