문제
https://www.acmicpc.net/problem/1157
소스
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
string input;
cin >> input;
string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
vector<int> v(26, 0);
for (int i = 0; i < input.length(); i++) {
int idx = 0;
//대문자
if (input[i] >= 'A' && input[i] <= 'Z') {
idx = input[i] - 'A';
}
else {
idx = input[i] - 'a';
}
v[idx]++;
}
int max = 0; int max_idx = 0;
for (int i = 0; i < v.size(); i++) {
if (v[i] > max) {
max = v[i];
max_idx = i;
}
}
sort(v.begin(), v.end());
if (v[24] == v[25]) cout << '?';
else cout << alphabet[max_idx];
return 0;
}
1. 이번 코드에서는 저번에 아쉬웠던 알파벳을 배열로 받은 걸 string으로 고쳤다. 훨씬 깔끔해!
2. input[i] >= 'A'input[i] >= 'A' && input[i] <= 'Z' : 이런식으로 비교를 하면 아스키코드가 비교가 되어 아스키코드가 A보다 크고 Z보다 큰 문자들을 의미한다. 따라서 A, B, C, ... , X, Y, Z 가 저 범위에 속하게 되는 것이다.
3. 대소문자 구분이 없기 때문에 a와 A의 인덱스를 같도록 했다.
4. 인덱스를 input[i] - 'a' 이런식으로 잡으면 a의 아스키 코드 값이 빼지는 것으로 input[i] 가 a 이면 인덱스가 0이 되고 input[i] 가 b 이면 인덱스가 1이 된다.
'개인 공부 > 코딩테스트' 카테고리의 다른 글
[C++][백준 5622][문자열 처리] 다이얼 :: seoftware (0) | 2020.02.16 |
---|---|
[C++][백준 2908][문자열 처리] 상수 :: seoftware (0) | 2020.02.16 |
[C++][백준 10809][문자열 처리] 알파벳 찾기 :: seoftware (0) | 2020.02.16 |
[C++][백준 1152] [문자열 처리] 단어의 개수 :: seoftware (1) | 2020.02.16 |
[C++][백준 11654][문자열 처리] 아스키 코드 :: seoftware (0) | 2020.02.16 |
댓글