주어진 단어들 중 첫글자가 같은 단어가 5개 이상 있다면 그 단어들을 오름차순으로 나열하고,
없다면 PREDAJA 를 출력하는 문제이다.
아스키코드를 활용하면 굉장히 간단하게 풀 수 있었다.
단어들을 입력 받을 때마다, 배열에서 해당 문자의 아스키코드에 해당하는 인덱스의 값에 +1을 해주면,
(배열 선언 크기를 좀 더 효율적으로 사용하려면 해당 아스키코드 값에서 97을 뺀 값으로 인덱스를 적용하면 된다.)
전체 단어가 입력되면 해당 배열에 어떤 문자가 몇 번 입력되었는지 배열에 그 횟수가 등록되어 있을 것이다.
그 후 반복문을 통해 값이 5 이상인 인덱스가 있다면,
string 으로 선언해 둔 변수에 해당 인덱스를 더한다.
string 변수에 숫자인 인덱스 값을 더하지만, C++이 유연하게 해당 숫자를 아스키코드에 해당하는 문자로 변환하여 더하게 된다.
인덱스(아스키코드) 순서대로 배열이 정렬되어 있으니 찾는 순서가 결국 오름차순 순서가 되므로,
string 으로 선언한 변수에 담겨 있는 최종 값이 바로 답이 된다.
그리고 5이상인 값이 없으면 PREDAJA 를 출력하면 된다.
#include<bits/stdc++.h>
using namespace std;
int n, cnt[123];
string S, answer;
int main(){
cin >> n;
for(int i = 0; i < n; i++){
cin >> S;
cnt[S[0]+0]++;
}
for(int i = 0; i < 123; i++){
if(cnt[i] >= 5) {
answer += i;
}
}
if(answer.size()) cout << answer << '\\n';
else cout << "PREDAJA" << '\\n';
return 0;
}
처음에 cnt[S[0]이라고 적은 부분에서 에러가 났다.
숫자가 들어갈 부분에 문자를 넣는다고 무조건 숫자로 바뀐다기보단,