[テストコード]学習白俊1157単語-C++
問題を解く
これは
1.int arr[26]を作成し、arr[0]はaからarr[25]がzであることを示し、各回数を含む配列を作成する.
2.文字列を1つずつ参照し、arr配列に個数を追加します.
3.arr配列を参照しながらmaxを参照します.
-注意事項
与えられた単語の長さを見つけるためにstrlenという関数を用いた.この関数は文字列の低音から文字列の長さまでのプローブ関数です.したがって、文字列の検索に時間がかかるため、forなどの重複文の条件に入るとタイムアウトが表示されます.不動態変数を利用して事前に計算したほうがいい.
string.hヘッダファイルの関数.visualstudioなどのIDEを使用する場合は、ヘッダファイルを含める必要があります.
C++コード
#include <iostream>
#include <string.h>
#include <algorithm>
#define MAX_SIZE 1000000
using namespace std;
char word[MAX_SIZE];
int main() {
// 소문자 대문자
// 97- 65 = 32
//단어의 길이 1000000을 넘지 않는다.
int alphabet[26] = { 0 };
int max_index = 0;
int max = 0;
int unique = 0;
cin >> word;
//strlen함수는 string.h헤더에 포함되어 있다. - gcc인 경우 수동 추가하기
int s_length = strlen(word);
sort(word, word + s_length);
//반복문에 strlen 함수를 추가하면 안된다.
// strlen은 문자열 처음~string길이 까지 찾기에 O(L^2) 를 가진다.
for (int i = 0; i < s_length; i++) {
//대문자 일 경우 소문자 변환
if (97 <= word[i] && word[i] <= 129)
word[i] -= 32;
// 알파벳 개수 추가
alphabet[word[i] - 65]++;
}
max = *max_element(alphabet, alphabet+26);
for (int i = 0; i < 26; i++) {
if (alphabet[i] == max) {
max_index = i;
unique++;
}
}
if (unique > 1)cout << "?\n";
else
cout <<char(max_index+65) <<"\n";
return 0;
}
Reference
この問題について([テストコード]学習白俊1157単語-C++), 我々は、より多くの情報をここで見つけました https://velog.io/@secdoc/코딩테스트-백준-1157-단어공부-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol