BACKJOON, 백준

백준 1157번 - 중복값 확인

돌맹이떼굴떼굴 2023. 12. 7. 23:45

1. 문제

int main()
{
	char c;
	int max = 0;
	int max_num = 0;
	int max_ = 0;
	int alphabet_cnt[26] = { 0, };

	while ((c = getchar()) != '\n')
	{
		if (c >= 'a' && c <= 'z')
			c = c - ('a' - 'A');

		alphabet_cnt[(c - 'A')]++;
	}

	for (int i = 0; i < 26; i++)
	{
		if (max < alphabet_cnt[i])
		{ 
			max = alphabet_cnt[i];
			max_num = i;
		}
	}

	for (int i = 0; i < 26; i++)
	{
		if (alphabet_cnt[max_num] == alphabet_cnt[i])
			max_++;
	}

	if (max_ == 1)
		printf("%c", max_num + 'A');
	else
		printf("?");


	return 0;
}

 

배열 중 가장 많은 큰 값을 골라내는데 중복이 있으면 '?'를 출력해야 한다. for문 2번, if문 1번 썼는데 너무 복잡하다.

 

2. 문제 해결

int main()
{
	char c;
	int max = 0;
	char ans;
	int alphabet_cnt[26] = { 0, };

	while ((c = getchar()) != '\n')
	{
		if (c >= 'a' && c <= 'z')
			c = c - ('a' - 'A');

		alphabet_cnt[(c - 'A')]++;
	}

	for (int i = 0; i < 26; i++)
	{
		if (max == alphabet_cnt[i])
			ans = '?';
		else if (max < alphabet_cnt[i])
		{
			max = alphabet_cnt[i];
			ans = i + 'A';
		}
	}

	printf("%c", ans);

	return 0;
}

 

max 값은 무조건 있을거니까 중복이 있다면 ans = '?'

max가 갱신되면 ans에 해당 값을 넣는다.

 

* 왜 이 생각을 못했을까? 머리가 잘 안돌아가는 듯ㅠ