BEAKJOON

백준(1157번 단어 공부)풀이 C++

Shin_jisoo 2021. 1. 9. 18:00
728x90

www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

1) 주석 없는 VERSION

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
	string s;
	cin >> s;

	int array[26] = { 0, };

	for (int i = 0;i < s.length();i++) {
		if (s[i] < 97)
			array[s[i] - 65]++;
		else
			array[s[i] - 97]++;
	}

	int max = 0;
	int index = 0;

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

	int count = 0;

	for (int i = 0;i < 26;i++) {
		if (array[i] == max) {
			count++;
			
			if (count >= 2) {

				cout << "?" << endl;
				return 0;
			}
		}
	}

	cout << (char)(index + 65) << endl;
	return 0;
}

 

2) 주석 있는 VERSION

#include <stdio.h>
#include <iostream>
using namespace std;

int main() {
	string s;
	cin >> s;

	int array[26] = { 0, };

	for (int i = 0;i < s.length();i++) {
		if (s[i] < 97) // 대문자인 경우
			array[s[i] - 65]++;
		else // 소문자인 경우
			array[s[i] - 97]++;
	}

	int max = 0;
	int index = 0;

	for (int i = 0;i < 26;i++) {
		if (max < array[i]) {
			max = array[i]; // 최댓값 찾기
			index = i; // 최댓값 인덱스 번호 저장
		}
	}

	int count = 0;

	for (int i = 0;i < 26;i++) {
		if (array[i] == max) {
			count++; // 최댓값 개수 저장
			
			if (count >= 2) { // 최댓값이 두 개 이상인 경우

				cout << "?" << endl; // ? 출력
				return 0;
			}
		}
	}

	cout << (char)(index + 65) << endl; // 아닌 경우 대문자로 최댓값의 알파벳 출력
	return 0;
}