코딩/백준 문제 (브론즈)

[백준/1157/C언어] 단어 공부 _ 풀이

룻밤 2023. 8. 14. 17:36

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

 

1157번: 단어 공부

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

www.acmicpc.net


풀이

#include <stdio.h>
int main() {
	char s[1000000];		// 문자열은 1,000,000을 넘지않음
	int arr[26] = {};		// 알파벳에 따른 반복 횟수 배열
	int max = 0;
	int max_i;				// max의 인덱스

	scanf("%s", s);
	int i = 0;
	while (s[i] != '\0') {				// 문자열 끝까지 반복
		if (s[i] >= 65 && s[i] <= 90)		// 문자가 대문자일때
			arr[s[i] - 65]++;				
		else if (s[i] >= 97 && s[i] <= 122)	// 문자가 소문자일때
			arr[s[i] - 97]++;
		i++;
	}

	int dup = 0;					// 중복 변수
	for (int i = 0; i < 26; i++) {	
		if (max < arr[i]){			// 가장 반복횟수가 큰 것을 max로 잡음
			max = arr[i];
			max_i = i;				// 그때의 max 인덱스 변수
		}
	}
	for (int i = 0; i < 26; i++) {
		if (max == arr[i])			// 같은 max값이 여러개일때
			dup++;					// 중복 변수 +1
	}
	if (dup > 1)			// 중복 변수가 1이상일때
		printf("?\n");		// ? 출력
	else
		printf("%c", max_i + 65);	// 아닐때 알파벳 출력

	return 0;
}