본문 바로가기
알고리즘/백준 문제 풀이

[BOJ/백준] 1157번 단어 공부 - [c/c++] 풀이

by 미니상미니 2022. 10. 17.
반응형

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

 

 

 


  • 문제

단계별로 풀어보기 - 문자열 - [5단계] 1157번


해설

알파벳 사용 횟수를 저장하는 배열 cnt를 초기화한 후

알파벳 별로 사용 횟수를 증가시켜준다.

 

알파벳 사용 개수의 최대값인 max를 통해 최댓값인 경우의 수를 세어 1인 경우 사용 횟수가 max인 알파벳 출력

경우의 수가 2 보다 클 경우 ?를 출력한다.

 

코드

c

#include <stdio.h>
#include <string.h>



int main() {

	int cnt[26] = { 0, };
	int max = -1; // max: 알파벳 사용 개수의 최대값
	char res; // 사용 개수가 max인 알파벳

	char s[1000000];

	scanf("%s", s);

    int t = strlen(s);
	for (int i = 0; i < t; i++) {
		if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A'; // 소문자는 대문자로 처리

		if (++cnt[s[i] - 'A'] > max) { 
			max = cnt[s[i] - 'A'];
			res = s[i];
		}
	}

	int check = 0; // 가장 많이 사용된 알파벳이 여러 개인 지 체크

	for (int i = 0; i < 26; i++) {
		if (max == cnt[i]) check++;
	}

	if (check == 1) printf("%c", res);
	else printf("?");

	return 0;
}

 

c++

#include <iostream>
#include <algorithm>

using namespace std;


int main() {

	int cnt[26] = { 0, };
	int max = -1; // max: 알파벳 사용 개수의 최대값
	char res; // 사용 개수가 max인 알파벳

	string s;

	cin >> s;

	for (int i = 0; i < s.length(); i++) {
		if (s[i] >= 'a' && s[i] <= 'z') s[i] = s[i] - 'a' + 'A'; // 소문자는 대문자로 처리

		if (++cnt[s[i] - 'A'] > max) { 
			max = cnt[s[i] - 'A'];
			res = s[i];
		}
	}

	int check = 0; // 가장 많이 사용된 알파벳이 여러 개인 지 체크

	for (int i = 0; i < 26; i++) {
		if (max == cnt[i]) check++;
	}

	if (check == 1) cout << res;
	else cout << "?";

	return 0;
}

 

 

 

 

 

반응형

댓글