본문 바로가기

Algorithm/문제풀이

[백준] 1157번: 단어 공부

문제링크 https://www.acmicpc.net/problem/1157

 

문제풀이

① A부터 Z까지 길이가 26인 배열을 만든다.

② 입력받은 문자열을 모두 대문자로 변환한다.

③ 아스키 문자표에서 A는 65에 해당한다.

     따라서 입력받은 문자 하나씩 차례로 65를 빼 인덱스로 사용한다.

④ 위에서 구한 인덱스에 해당하는 값을 증가시킨다.

 

예) Mississipi

⑤ 위 배열을 차례로 돌면서 가장 큰 값을 가지고 있는 인덱스를 구한다.

⑥ 가장 큰 값이 중복으로 나오면 인덱스를 -1로 저장한다.

⑦ 인덱스가 -1이면 '?'를, -1이 아니면 그에 해당하는 문자를 출력한다.

 

 

소스코드

/*
 * 백준 1157번: 단어 공부
 */

#include <iostream>
#include <string>

using namespace std;

int main() {
	string word;
	getline(cin, word);

	int arr[26] = {0, };
	for (int i = 0; i < word.length(); i++) {
		int idx = toupper(word[i]) - 65;
		arr[idx]++;
	}

	int max = 0;
	int index = 0;
	for (int i = 0; i < 26; i++) {
		if (max < arr[i]) {
			max = arr[i];
			index = i;
		}
		else if (max == arr[i]) {
			index = -1;
		}
	}

	char result = index == -1 ? '?' : index + 65;
	cout << result;

	return 0;
}

'Algorithm > 문제풀이' 카테고리의 다른 글