View

반응형

문제 링크: https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

 
 
 

【 문제 】

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
 

【 입력 】

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
 

【 출력 】

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 '?'를 출력한다.

 

【 풀이 】

ASCII 코드와 문자열에 관한 이해도를 묻는 문제이다.

  • 문자열 입력
  • 입력 문자열을 모두 대/소문자로 전환
  • 모든 알파벳을 저장한 배열을 만들어 입력 문자열과 비교
  • 각 알파벳이 나온 횟수를 차례대로 배열에 저장
  • 가장 많이 사용된 알파벳이 여러 개인지 확인. 여러 개라면 '?'를 출력.
  • 가장 많이 사용된 알파벳을 대문자로 출력.
 

 

【 C 소스 코드 】

#include <stdio.h>
char str[1000010];

int main(void)
{
	int a[30];
	int i,j,k;
	int cnt1 = 0,cnt2=0;
	int max,mx;
	scanf("%s", str);
	for (i = 65; i < 91; i++)
	{
		k = 0;
		for (j = 0; str[j] != '\0'; j++)
		{
			if (str[j] >= 97)
				str[j] = str[j] - 32;
			if (str[j] == i)
				k++;
		}
		a[cnt1] = k;
		cnt1++;
	}
	max = a[0];
	mx = 65;
	for (i = 65; i < 91; i++)
	{
		if (max < a[i - 65])
		{
			max = a[i - 65];
			mx = i;
		}
	}
	for (i = 65; i < 91; i++)
		if (max == a[i - 65])
			cnt2++;
	if (cnt2 >= 2)
		printf("?");
	else
		printf("%c", mx);
	return 0;
}

 

 

 

728x90
반응형
Share Link
reply
250x250
반응형
«   2024/10   »
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