[ 백준 1157번 ] 단어 공부
2021. 12. 23. 17:45ㆍ백준/단계별 문제
백준 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 |