smooth waters run deep

1d-1c/BOJ

1157_단어 공부 (C++)

yeon_11 2020. 8. 25. 16:29
 

1157번: 단어 공부

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

www.acmicpc.net

#include <iostream>
#include <string>
#include <algorithm> //max
using namespace std;

int main() {
	int alpha[26] = { 0, };

	string word;
	cin >> word;

	for (int i = 0; i < word.length(); i++) {
		char cur = word.at(i);

		if (cur >= 'A' && cur <= 'Z') { //대문자 -> 소문자로
			cur += 32;
		}

		alpha[(int)cur - 97]++;
	}

	int max_alpha = 0; //제일 많이 사용된 알파벳
	for (int i = 0; i < 26; i++) {
		max_alpha = max(max_alpha, alpha[i]);
	}

	int ans_cnt = 0;
	char ans;
	for (int i = 0; i < 26; i++) { //제일 많이 사용된 알파벳이 여러개인지 확인
		if (alpha[i] == max_alpha) {
			ans_cnt++;
			ans = (char)(i + 65);
		}
	}
		
	if (ans_cnt != 1)
		cout << "?";
	else
		cout << ans;

	return 0;
}

 

[문제 풀이 생각 과정]

1. 소문자,대문자 구분하지 않기때문에 대문자를 소문자로 바꿔서 생각했다.

2. max_alpha 변수를 만들어서 - 가장 많이 사용된 알파벳 횟수 체크!

3. 가장 많이 사용된 알파벳 횟수(max_alpha 변수)가 alpha[]배열에서 여러개 존재하는 지 확인했다.

  만약 여러개 존재한다면 - ? 출력 / 한 개만 존재한다면 - 그 알파벳 출력

 

알파벳 배열 이용하는 문제가 갑자기 쉽게 느껴진다 헤헤

코딩찌질이를 이렇게 느끼게 해주다니 백준짱.. 실버단계 문제도 얼른 쉽게 느껴지길 ...!

 

'1d-1c > BOJ' 카테고리의 다른 글

5622_다이얼 (C++)  (0) 2020.08.26
2908_상수 (C++)  (0) 2020.08.26
10809_알파벳 찾기 (C++)  (0) 2020.08.25
4673_셀프 넘버 (C++)  (0) 2020.08.24
8958_OX퀴즈 (C++)  (0) 2020.08.17