' [C/C++] 백준 1157번 C++ 풀이

Programming/C & C++

[C/C++] 백준 1157번 C++ 풀이

mdisprgm 2021. 8. 30. 23:23
728x90

백준 문제 1157번 C++풀이이다.

 

아래 코드는 정답이었지만

 

너무 길고 복잡한 것 같아서

 

고수들의 코드를 확인해보려고 했는데..

 

소름돋게 똑같은 알고리즘을 써서;;

 

내가 맞게 잘 한 거구나.. 라는 생각과 함께

 

여러 풀이들이 변수이름까지 똑같은 걸 보고 다들 정답을 보고 하는 구나;;

 

라는 생각을 하며..

 

힌트와 답을 공유한다.

 

 

#include <iostream>
#include <string>

int main() {
	std::string str;//문자열
	std::cin >> str;//문자열 입력

	int count[26] = { 0 };//카운트
	for (int i = 0, idx = 0; i < str.length(); i++)
	{
		idx = str[i];
		if (idx < 97)//대문자면 65를 빼고
			idx -= 65;
		else//소문자면
			idx -= 97;//97을 빼서 알파벳 번호에 ++을 함
		count[idx]++;
	}

	int max, idx = 0;//최대값과 알파벳 번호
	bool overlap = false;//중복되는가

	max = -1;//초기 최대값, 코드를 짜고 보니 0으로도 된다.
	for (int i = 0; i < 26; i++) {
		if (max < count[i])//max를 갱신해야 한다면
		{
			max = count[i];//일단 max갱신하고
			idx = i;//알파벳 번호도 바꾸고
			overlap = false;//중복이 아니므로 false
		}
		else if (max == count[i])
		{
			overlap = true;//max와 count[i]가 같다면 중복이므로 true
		}
	}
	if (overlap) std::cout << '?';//중복이면 ?
	else std::cout << char(idx + 65);//아니면 알파벳 번호 + 65로 대문자로 출력.
}
728x90

'