문제
소스코드
#include<iostream>
#include<string>
#include<array>
#include<algorithm>
constexpr int ALPHABET = 27;
int main() {
std::array<int, ALPHABET> wordList{0};
std::string word;
std::cin >> word;
for (auto iter = word.cbegin(); iter != word.cend(); ++iter) {
char temp=toupper(*iter);
wordList[temp-'A'] += 1;
}
int max = -1;
int result = 0;
for (int i = 0; i < ALPHABET; ++i) {
if (wordList[i] > max) {
max = wordList[i];
result = i;
}
}
auto same_count = std::count(wordList.cbegin(), wordList.cend(), max);
if (same_count > 1)
std::cout << "?\n";
else
std::cout << static_cast<char>(result + 'A') << "\n";
}
후기
알파벳 개수를 세는 문제이다. 배열의 Index를 알파벳 개수로 매핑해서 해당 알파벳이 나오면 해당 Index의 값을 증가하는 형식으로 문제를 풀었다.
같은 크기가 나오는 것을 어떻게 해결하면 깔끔할까 고민을 해봤는데 결국 count를 사용해서 풀었다.
시간 복잡도는 배열의 크기만큼인 O(N)이다.
내가 약한 부분 중 하나인 문자열 처리 부분이다.
개인적으로 C++ 언어로 처리하기 귀찮은 게 문자처리인 거 같다. 파이썬 같은 언어를 보면 문자처리가 편리하게 되어있어서 파이썬으로 문제를 푸는 사람들이 부러워지는 경우이다.
지금은 특정 알고리즘을 사용할 필요는 없었지만 KMP나 라빈 카프 같은 알고리즘을 배우면 해당하는 문제도 풀어봐야겠다. 이 문자열 처리를 중급 이상으로 마스터하는 것이 요번 상반기 목표 중 하나이다.
출처 및 레퍼런스
문제 링크: https://www.acmicpc.net/problem/1157
'온라인 코딩 > 문자열(String)' 카테고리의 다른 글
[백준] 11720번 숫자의 합 (0) | 2020.02.25 |
---|---|
[백준] 10908번 알파벳 찾기 (0) | 2020.02.24 |
[백준] 1152번 단어의 개수 (0) | 2020.02.19 |
[백준] 11654번 아스키 코드 (0) | 2020.02.16 |
[백준] 2675번 문자열 반복 (0) | 2020.02.15 |