이번에는 백준 1159번 농구 경기 문제를 풀어보았습니다.
이 문제는 선수들의 성이 주어졌을 때, 같은 첫 글자를 가진 선수가 5명 이상인 알파벳을 모두 찾는 문제입니다.
이전의 알파벳 개수 문제와 비슷하게, 배열로 개수를 세는 방식으로 풀 수 있었습니다.
선수들의 성이 주어집니다.
감독은 성의 첫 글자가 같은 선수 5명을 선발하려고 합니다.
따라서 각 성의 첫 글자를 기준으로 몇 명이 있는지를 확인한 뒤,
PREDAJA 출력하면 됩니다.
이 문제의 핵심은 각 성의 첫 글자가 몇 번 등장했는지 세는 것입니다.
알파벳 소문자만 나오므로 크기가 26인 배열을 두고,
각 이름의 첫 글자에 해당하는 위치 값을 1씩 증가시키면 됩니다.
그 후 배열을 순회하면서 값이 5 이상인 알파벳만 결과에 넣어주면 됩니다.
#include <bits/stdc++.h>
using namespace std;
vector<char> result;
int cnt[26];
int solve() {
for (int i = 0; i < 26; i++) {
if (cnt[i] >= 5) {
result.push_back('a' + i);
}
}
if (result.size() != 0)
return 1;
return 0;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string temp;
cin >> temp;
cnt[temp[0] - 'a']++;
}
if (solve()) {
for (char c : result) {
cout << c;
}
} else {
cout << "PREDAJA";
}
return 0;
}
n을 입력받는다.cnt[temp[0] - 'a'] 값을 증가시킨다.PREDAJA를 출력한다.이 문제는 이전에 풀었던 알파벳 개수 문제와 비슷한 방식으로 접근할 수 있었습니다.
차이가 있다면 문자열 전체를 세는 것이 아니라,
각 문자열의 첫 글자만 사용한다는 점입니다.
즉,
temp[0]으로 첫 글자를 확인한 뒤알파벳 범위가 고정되어 있기 때문에 배열을 사용하는 방식이 자연스럽습니다.