[ 백준 1157번 ] 단어 공부

2021. 12. 23. 17:45백준/단계별 문제

백준 1157번 / 단어 공부

 

백준 1157번 - 단어 공부

 

채점결과는 다음과 같다

  메모리 시간
1번째 방법 4916 KB 76 ms

 

문제 풀이
먼저 알파벳 개수를 저장할 길이 26 짜리 alphabet 배열 하나랑 소문자부터 대문자까지 비교할 a ~ Z 문자열 alphabets를 하나 선언 해준다

1. INPUT 값 문자열 str를 입력을 받고 이중 반복문을 돌려주면서 알파벳이 포함되면 소문자든 대문자든 소문자 인덱스(0 ~ 25)에 +1를 해준다
소문자 z 와 대문자 Z도 소문자 z   2개로 처리해주는 뜻이다

INPUT = zZa
alphabets = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

i = 0
str[i] = z
j = 25      alphabets[j] = z
alphabet[j] += 1

i = 1
str[i] = Z
j = 51      alphabets[j] = Z
alphabet[j - 26] += 1

i = 2
str[i] = a
j = 0      alphabets[j] = a
alphabet[j] += 1


2. 각 알파벳 개수를 인덱스에 맞게 집어넣었으면 반복문을 하나 더 돌려서 알파벳 개수가 가장 많이 들어간 인덱스를 찾아주고 반복문이 끝날때 까지 알파벳이 개수가 동일하면 ? 를 출력해준다
최대개수를 찾은 인덱스는 소문자 인덱스이므로 출력을 해줄 때는 +26을 해줘 대문자로 변환 후 출력을 해준다

INPUT = zZa
alphabets = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

alphabet[25] = 2개
alphabet[0] = 1개

answer = alphabet[25 + 26 = 51]   대문자 변환

OUTPUT = Z

 

코드
#include <stdio.h>
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
	unsigned int i, j;
	int alphabet[26] = {0, };
	int ch_max = 0;
	string alphabets = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	string str;
	string answer;

	cin >> str;

	for ( i = 0; i < str.length(); i++ ) {
		for ( j = 0; j < alphabets.length(); j++ ) {
			if ( str[i] == alphabets[j] && j < 26 ) alphabet[j] += 1;
			if ( str[i] == alphabets[j] && j >= 26 ) alphabet[j - 26] += 1;
		}
	}

	for ( i = 0; i < 26; i++ ) {
		if ( ch_max == alphabet[i] ) {
			answer = "?";
		}
		if ( ch_max < alphabet[i] ) {
			ch_max = alphabet[i];
			answer = alphabets[i + 26];
		}
	}

	cout << answer;
}

'백준 > 단계별 문제' 카테고리의 다른 글

[ 백준 2908번 ] 상수  (0) 2022.01.03
[ 백준 1152번 ] 단어의 개수  (0) 2021.12.29
[ 백준 10809번 ] 문자열 반복  (0) 2021.12.18
[ 백준 10809번 ] 알파벳 찾기  (0) 2021.12.13
[ 백준 11720번 ] 숫자의 합  (0) 2021.12.09