소스코드

#include <stdio.h>
#include <string.h>

int main (){
	char a[1000000];
	int b[26];
	int i, temp, ans;
	int c = 0;
	int d = 0;
	int len;
	for(i=0; i<26; i++){
		b[i] = 0;
	}
	
	scanf("%s", &a);
	len = strlen(a);
	for (i=0; i<len; i++){
		if (a[i]>='A' && a[i]<='Z') a[i] = a[i]-'A'+'a';
		temp = a[i] - 97;
		b[temp]++;
	}
	
	for(i=0; i<26; i++){
		if (c < b[i]) {
			c = b[i];
			ans = i;
		}
	}
	for(i=0; i<26; i++){
		if (c == b[i] && i != ans) d = 1;
	}
	if (d == 1) printf("?");	
	else printf("%c", ans+65);
}

일단... 계속 틀렸던 이유는 strlen(a) 를 조건문에 집어넣어서 시간 초과가 떴고, 그러면 안된다는 걸 깨닫고 len변수를 선언하고 값을 len에 저장한뒤에 계산했는데.. 문제가 strlen(a) 를 a 스캔 이후에 넣었어야 했는데 그 위에 넣어서 strlen(a) 값이 0이 되어 버림... 그럼 두번째 for loop이 안돌아간다.. 그것도 모르고 잘 나오던 게 왜 안나오나 했다... 코드수정할 때 위치 잘 보자. 그리고 if 조건문에서는 ==, !=, <= >=, <, >만 사용가능. = 넣으면 안돌아감!

해설

우선 변수들을 설정하고, 알파벳 개수 index 배열의 모든 값을 0으로 설정한다.

배열에 영문자를 받고, for문을 이용해 우선 알파벳대문자인 친구들을 모두 소문자로 바꿔준다. ('A' 보다 크고 'Z' 보다 작으면 모두 대문자. 소문자로 만들려면 'A'를 빼주고 대신 'a' 를 더해주면 됨)

모두 소문자로 값들을 바꿨으면, 해당 알파벳 개수 index 배열에 값을 더해준다. a[i]-97 하면 index 숫자를 얻을 수 있음. ('a' 의 ASCII CODE가 97이라서)

index에 알파벳 개수를 저장했으면, 이제 for문을 이용해 index가 가장 큰 알파벳을 찾아준다.

그리고 for문을 한번 더 써서 index가 가장 큰 알파벳과 동일한 개수가 등장하는 알파벳이 있는지 찾아준다.

있으면 ?, 없으면 +65를 해서 대문자가 출력되도록 하면 끝. 

 

복사했습니다!