[출처 : 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;
}
결과
* 개인적인 학습 목적으로 작성한 글이기에 내용에 잘못된 정보가 있을 수 있습니다.
'게임 클라이언트 개발 > 알고리즘 문제' 카테고리의 다른 글
[알고리즘 2단계] 다이아몬드, 마름모 (반복문 활용) (0) | 2020.07.25 |
---|---|
[알고리즘 2단계] 방 탈출하기 (퀵 정렬, 이진탐색) (0) | 2020.07.24 |
[알고리즘 2단계] 완전수 (0) | 2020.07.22 |
[알고리즘 2단계] Factorial(계승) (0) | 2020.07.21 |
[알고리즘 2단계] 계산기 (0) | 2020.07.21 |