728x90
https://www.acmicpc.net/problem/9046
9046번: 복호화
입력의 T(1 ≤ T ≤ 20)는 테스트 케이스로, 입력 제일 상단에 주어진다. 각각의 테스트 케이스는 한 줄마다 소문자와 공백으로 이루어진 영어 문장이 주어진다. 이 문장의 길이는 적어도 1이상이
www.acmicpc.net
처음에 이 문제를 풀 땐, 암호문을 평문으로 바꾸고 암호문에 가장 많이 사용된 평문 알파벳을 찾는 것인 줄 알았다.
문제에서 보여준 예시도 hello there -> e 였기 때문에
그런데 풀다 보니 그냥 암호문에서 가장 많이 사용된 알파벳을 찾는 것이었다... 따흑... 시간만 날려먹은..
STL을 사용하려다가 그냥 배열을 선택했다. 배열 0~25는 'a'~'z'로 사용할 수 있으므로... ('a'를 빼주면 해당 알파벳의 배열 인덱스가 나온다) 그리고 카운팅이 가장 많이 된 알파벳을 찾고, 만약 카운팅 개수가 같은 알파벳이 있으면?를 출력해준다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int cnt[26] = {0, };
int t;
cin >> t;
cin.ignore();
while(t--){
string s;
getline(cin, s);
for(int i=0; i<s.size(); i++){
if(s[i] == ' ') continue;
int n = s[i]-'a';
cnt[n]++;
}
int maxN = cnt[0];
char ans = 'a' + 0;
for(int i=1; i<26; i++){
if(maxN < cnt[i]){
maxN = cnt[i];
ans = 'a' + i;
}
}
sort(cnt, cnt+26, greater());
if(cnt[0] == cnt[1]) cout << "?\n";
else cout << ans << '\n';
for(int i=0; i<26; i++) cnt[i] = 0;
}
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준/c++] 4659번: 비밀번호 발음하기 (0) | 2022.07.18 |
---|---|
[백준/c++] 1181번: 단어 정렬 (0) | 2022.07.18 |
[백준/c++] 3029번: 경고 (0) | 2022.07.17 |
[백준/c++] 9093번: 단어 뒤집기 (0) | 2022.07.16 |
[백준/c++] 5568번: 카드 놓기 (0) | 2022.07.14 |