1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
전체코드
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int array[26] = { 0, };
char word[1000000], max_index = 0;
cin >> word;
int len = strlen(word), max_num = 0, count = 0;
for (int i = 0; i < len; i++) if (word[i] >= 'a' && word[i] <= 'z') word[i] -= 32;
for (int j = 0; j < len; j++) array[word[j]-'A']++;
for (int i = 0; i < 26; i++) {
if (array[i] > max_num) {
max_num = array[i];
max_index = i;
}
}
for (int i = 0; i < 26; i++) if (array[i] == max_num) count++;
count > 1 ? printf("?") : printf("%c", max_index + 65);
return 0;
}
for (int i = 0; i < len; i++) if (word[i] >= 'a' && word[i] <= 'z') word[i] -= 32;
단어배열의 값이 소문자에 해당하면 아스키코드 값을 32를 빼주어 대문자로 만들어주었다.
for (int j = 0; j < len; j++) array[word[j]-'A']++;
array는 알파벳순서대로 등장횟수를 저장하는 배열이다.
array[word[j] - 'A'] : 단어의 알파벳에 'A'를 빼주어 인덱스로 사용하였다.
for (int i = 0; i < 26; i++) { if (array[i] > max_num) { max_num = array[i]; max_index = i; } }
단어에서 가장 많이 사용된 알파벳(인덱스로 저장)과 횟수를 저장하는 코드이다.
최댓값을 구하는 방식을 활용하였다.
for (int i = 0; i < 26; i++) if (array[i] == max_num) count++; count > 1 ? printf("?") : printf("%c", max_index + 65);
가장 많이 사용된 알파벳이 1개 이상이면 '?'를 출력하고, 아니라면 위에서 저장한 array의 최댓값 index에 65를 더해 알파벳 대문자를 출력해준다.

위에껀 옛날에 썻던 코드이고
밑에껀 지금 고친코드이다
이중반복문을 없애고 코드를 좀 고쳤더니 코드줄은 1/2로 줄었고, 시간도 미미하지만 4ms가 줄었다..
더 효율적인 코드를 쓸 수 있도록 노력해야겠다 !!
'CodingTest > 백준' 카테고리의 다른 글
[c++] 백준 - 1652: 누울 자리를 찾아라 (1) | 2023.05.10 |
---|---|
[c++] 백준 - 10812번: 바구니 순서 바꾸기 (0) | 2023.05.10 |
[c++] 백준 - 2908번: 상수 (0) | 2023.05.02 |
[c++] 백준 - 1152: 단어의 개수 (0) | 2023.05.02 |
[c++] 백준 - 10809번: 알파벳 찾기 (1) | 2023.05.02 |