C언어/ 아스키코드를 이용한 문자형 정수 변환

리얼니트·2021년 9월 8일
0

1학년

목록 보기
8/24
post-thumbnail

https://www.acmicpc.net/problem/1157

입력한 단어에서 가장 많은 수를 가진 알파벳의 대문자를 출력하는 문제.
아스키 코드를 이용해서 풀었다.

#include <stdio.h> 
#include <string.h>
int main(void){
    char arr[1000000];
    int alpah[26]={0, }, max=0, tmax=0, i=0, num=0;
    int len=0;
    scanf("%[^\n]",arr);
    len = strlen(arr);
    for(i=0; i<len; i++){
        if((int)arr[i]>=97)
            alpah[(int)arr[i]-32-65]++;
        if((int)arr[i]<97)
            alpah[(int)arr[i]-65]++;
    }
    for(i=0; i<26; i++){
        if(max<alpah[i]){    //가장 높은 알파벳의 갯수<해당알파벳의 갯수 ?
            tmax=i; //가장 높은 알파벳의 아스키코드값 구하기
            max=alpah[i];   //가장 높은 알파벳의 갯수
        }
    }
    for(i=0; i<26; i++)
        if(max==alpah[i]) num++;
    if(num>=2) printf("?");
    else    printf("%c",(char)(tmax+65));
    return 0;
}

아스키코드표를 보니까 대문자 A~Z 65~90이고 소문자 a~z는 97~122까지 값을 가지고 있었다.

소문자값을 대문자로 변환하려면 97~122번 값을 받았을 때 32를 빼면 된다는 사실 하나를 발견하고 코딩을 시작했다.

%c 문자형으로 값을 입력 받고, %d 정수형으로 값을 출력하면 입력받은 문자의 아스키코드 값을 간단하게 10진수로 출력할 수 있었다.

마지막에 mississipi와 같이 한 단어에 알파벳 수가 같은 숫자로 떨어질 때 ?를 출력하는 부분에서 시간이 좀 걸렸는데
for문을 한번 더 돌리면서 최고값과 같은 수를 가진 알파벳이 2개이상 있을 때 ?를 출력하도록 해서 문제를 해결했다.

profile
방구석에서 잘 살아요

0개의 댓글