본문 바로가기

알고리즘/BOJ

1157. 단어 공부

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

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

www.acmicpc.net

카운팅 정렬을 사용하면 정말 쉽게 풀 수 있다. 

<JAVA>

import java.io.BufferedReader;
import java.io.InputStreamReader;

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char[] s = br.readLine().toCharArray();
		int len = s.length;
		int numArr[] = new int[26];
		int Max = -1;
		int sameCount = 0;
		int MaxChar = 0;
		for (int i = 0; i < len; ++i) {
			if (s[i] >= (int) 'a') {
				++numArr[s[i] - 'a'];
			} else {
				++numArr[s[i] - 'A'];
			}
		}
		for (int i = 0; i < 26; ++i) {
			if (numArr[i] > Max) {
				Max = numArr[i];
				sameCount = 0;
				MaxChar = i;
			} else if (Max == numArr[i]) {
				sameCount++;
			}
		}
		if (sameCount > 0)
			System.out.print('?');
		else
			System.out.print((char) (MaxChar + 'A'));
	}
}

<C++>

#include<iostream>
using namespace std;
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	string s;
	cin >> s;
	int size = s.size();
	int numArr[26] = { 0 };
	int Max = -1;
	int sameCount = 0;
	int MaxChar = 0;
	for (int i = 0; i < size; ++i)
	{
		if (s[i] >= (int)'a')
		{
			++numArr[s[i] - 'a'];
		}
		else
		{
			++numArr[s[i] - 'A'];
		}
	}
	for (int i = 0; i < 26; ++i)
	{
		if (numArr[i] > Max)
		{
			Max = numArr[i];
			sameCount = 0;
			MaxChar = i;
		}
		else if (Max == numArr[i])
		{
			sameCount++;
		}
	}
	if (sameCount > 0)
		cout << "?";
	else
		cout << (char)(MaxChar + 'A');
}

'알고리즘 > BOJ' 카테고리의 다른 글

14889. 스타트와 링크  (0) 2019.10.15
16235. 나무재테크  (0) 2019.10.15
13460. 구슬 탈출 2  (0) 2019.10.15
1717. 집합의 표현  (0) 2019.10.14
4963. 섬의 개수  (0) 2019.10.07