프로그래밍 공방

[백준] 1157번 : 단어 공부 본문

개발/문제해결

[백준] 1157번 : 단어 공부

hyosupsong 2017. 10. 13. 06:41

문제

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는

프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.


입력

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지

않는다.


출력

(첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이

여러 개 존재하는 경우에는 ? 를 출력한다.)


문제해결방법

1. 길이가 26인 배열을 선언하고 0으로 초기화 해준다. (A~Z = 26개)

2. 알파벳의 아스키코드 값을 이용해서 앞서 선언한 배열에 각 알파벳이 몇 번 나왔는지 넣어준다.

3. 초기 최대값을 0으로 두고 배열을 돌며 최대값보다 크면 최대값에는 해당하는 배열의 값을

   넣어주고 인덱스 값 + 65 를 통해 char형태의 변수에 알파벳을 넣어준다. 만약 최대값과 같은

   배열 값이 있다면 변수에는 ?를 넣어준다.


코드

#include<iostream>
#include<string>
using namespace std;

int main() {
	string s;
	int arr[26] = { 0 };
	int max = 0;
	char answer;
	getline(cin, s);
	// 아스키 코드를 이용해서 배열에 각 알파벳이 몇 번 나왔는지 넣어준다.
	for (int i = 0; i < s.length(); i++) {
		if (s[i] >= 65 && s[i] <= 90)
			arr[s[i] - 65] += 1;
		else if (s[i] >= 97 && s[i] <= 122)
			arr[s[i] - 97] += 1;
	}
	// 해결방법 3에 해당하는 코드
	for (int i = 0; i < 26; i++) {
		if (arr[i] > max) {
			answer = i + 65;
			max = arr[i];
		}
		else if (arr[i] == max)
			answer = '?';
	}

	cout << answer << "\n";

	return 0;
}


'개발 > 문제해결' 카테고리의 다른 글

[프로그래머스] 2020 KAKAO BLIND : 문자열 압축  (0) 2020.11.01
[백준] 1463번 : 1로 만들기  (0) 2020.11.01
[백준] 2839번 : 설탕 배달  (0) 2020.10.31
[백준] 2589번 : 보물섬  (0) 2020.10.29
[백준] 2638번 : 치즈  (0) 2020.10.28