본문 바로가기
IT 이야기/알고리즘

문자 카운팅 알고리즘 C++ / Java / 파이썬 대소문자 변환

by youngmap 2023. 1. 19.
반응형

백준 1157번 : 단어 공부 문제를 풀면서 문자 카운팅 알고리즘과 대소문자 변환 방법을 알아봅시다.

 

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

단어가 주어집니다.

가장 많이 사용되는 알파벳을 대문자로 출력하는 문제입니다.

 

1) 처음 떠오르는 아이디어는 소문자를 모두 대문자로 변경하는 것입니다.

2) 알파벳은 26자 입니다. 크기가 26인 int형 배열을 선언하고 글자를 하나하나 보면서 +1 count 하면 되겠네요.

3) 가장 많은 알파벳을 출력하고, 여러개 존재하면 ? 물음표를 출력합니다.

 

1. C++

일부러 소문자로 변환하고 저장해 보았습니다.

크게 상관없습니다. 마지막에 인덱스에 'A'를 더하여 대문자로 출력하면 됩니다.

소문자 변환은 tolower( char 데이터형 )을 사용합니다.

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

int main() {
	string temp;
	cin >> temp;
    int a[26] = {0};	
	
	for(char c : temp){
		a[tolower(c) - 'a']++;
	}
	
	int max = 0;
	int count = 0;
	int index = 0;
	for (int i = 0; i < 26; i++) {
		if(max < a[i]){
			count = 1;
			max = a[i];
			index = i;
		}else if(max == a[i]){
			count++;
		}
	}

	if(count > 1){
		cout << "?" << endl;
	}else{
		char cTemp = index + 'A';
		cout << cTemp << endl;
	}
	return 0;
}

2. JAVA

java는 String 오브젝트에서 대소문자 변환 함수를 기본적으로 제공합니다.

C++과 코드가 거의 동일합니다.

대문자 변환은 .toUpperCase() 함수를 사용합니다.

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

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String temp = br.readLine();
		temp = temp.toUpperCase();

		int[] a = new int[26];

		for (int i = 0; i < temp.length(); i++) {
			a[temp.charAt(i) - 'A']++;
		}

		int max = 0;
		int count = 0;
		int index = 0;
		for (int i = 0; i < a.length; i++) {
			if(max < a[i]){
				count = 1;
				max = a[i];
				index = i;
			}else if(max == a[i]){
				count++;
			}
		}

		if(count > 1){
			System.out.println("?");
		}else{
			System.out.println((char)('A' + index));
		}
	}
}

 

3. Python 파이썬

파이썬은 숫자를 세는 함수와 가장 큰 값을 리턴하는 함수를 기본적으로 내장하고 있습니다.

매우 간단하게 풀립니다.

.upper() 함수를 사용합니다.

temp = str(input())
upTemp = temp.upper()

arr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
countArr =[]

for i in arr:
    countArr.append(upTemp.count(i))

if countArr.count(max(countArr)) > 1:
    print('?')
else:
    print(arr[countArr.index(max(countArr))])
반응형